Azure Active Directory B2C: entrada na Web com o OpenID ConnectAzure Active Directory B2C: Web sign-in with OpenID Connect

O OpenID Connect é um protocolo de autenticação criado com base em OAuth 2.0 que pode ser usado para conectar com segurança os usuários em aplicativos Web.OpenID Connect is an authentication protocol, built on top of OAuth 2.0, that can be used to securely sign users in to web applications. Ao usar a implementação do Azure AD B2C (Azure Active Directory B2C) do OpenID Connect, você pode terceirizar a inscrição, a entrada e outras experiências de gerenciamento de identidade em seus aplicativos Web para o Azure AD (Azure Active Directory).By using the Azure Active Directory B2C (Azure AD B2C) implementation of OpenID Connect, you can outsource sign-up, sign-in, and other identity management experiences in your web applications to Azure Active Directory (Azure AD). Este guia mostra como fazer isso de maneira independente da linguagem.This guide shows you how to do so in a language-independent manner. Ele descreve como enviar e receber mensagens HTTP sem usar qualquer uma das nossas bibliotecas de software livre.It describes how to send and receive HTTP messages without using any of our open-source libraries.

O OpenID Connect estende o protocolo de autorização do OAuth 2.0 a ser usado como um protocolo de autenticação.OpenID Connect extends the OAuth 2.0 authorization protocol for use as an authentication protocol. Isso permite que você execute o logon único usando OAuth.This allows you to perform single sign-on by using OAuth. Ele apresenta o conceito de um token de ID, que é um token de segurança que permite ao cliente verificar a identidade do usuário e obter informações básicas de perfil sobre o usuário.It introduces the concept of an ID token, which is a security token that allows the client to verify the identity of the user and obtain basic profile information about the user.

Como ele estende o OAuth 2.0, também permite que os aplicativos adquiram tokens de acesso com segurança.Because it extends OAuth 2.0, it also enables apps to securely acquire access tokens. Você pode usar access_tokens para acessar os recursos protegidos por um servidor de autorização.You can use access_tokens to access resources that are secured by an authorization server. Nós recomendamos o OpenID Connect se você estiver criando um aplicativo Web que fica hospedado em um servidor e é acessado por meio de um navegador.We recommend OpenID Connect if you're building a web application that is hosted on a server and accessed through a browser. Se você deseja adicionar o gerenciamento de identidades para seus aplicativos móveis ou para área de trabalho usando o Azure AD B2C, deve usar o OAuth 2.0 em vez do OpenID Connect.If you want to add identity management to your mobile or desktop applications by using Azure AD B2C, you should use OAuth 2.0 rather than OpenID Connect.

O Azure AD B2C estende o protocolo padrão OpenID Connect para fazer mais do que uma simples ação de autenticação e autorização.Azure AD B2C extends the standard OpenID Connect protocol to do more than simple authentication and authorization. Ele apresenta o parâmetro de política, que permite usar o OpenID Connect para adicionar experiências de usuário, como o gerenciamento de inscrição, de entrada e de perfis, ao seu aplicativo.It introduces the policy parameter, which enables you to use OpenID Connect to add user experiences--such as sign-up, sign-in, and profile management--to your app. Aqui, mostramos como usar o OpenID Connect e as políticas para implementar cada uma dessas experiências em seus aplicativos Web.Here, we show you how to use OpenID Connect and policies to implement each of these experiences in your web applications. Também mostraremos como obter tokens de acesso para acessar APIs Web.We'll also show you how to get access tokens for accessing web APIs.

As solicitações HTTP de exemplo na próxima sessão usam nosso diretório B2C de exemplo, fabrikamb2c.onmicrosoft.com, bem como nossas políticas e nosso aplicativo de exemplo https://aadb2cplayground.azurewebsites.net.The example HTTP requests in the next section use our sample B2C directory, fabrikamb2c.onmicrosoft.com, as well as our sample application, https://aadb2cplayground.azurewebsites.net, and policies. Fique à vontade para experimentar as solicitações usando esses valores ou os substituindo pelos seus próprios.You're free to try out the requests yourself by using these values, or you can replace them with your own. Saiba como obter seus próprios locatário, aplicativo e políticas B2C.Learn how to get your own B2C tenant, application, and policies.

Enviar solicitações de autenticaçãoSend authentication requests

Quando o aplicativo Web precisa autenticar o usuário e executar uma política, ele pode direcionar o usuário para o ponto de extremidade /authorize .When your web app needs to authenticate the user and execute a policy, it can direct the user to the /authorize endpoint. Essa é a parte interativa do fluxo, em que o usuário realiza uma ação, dependendo da política.This is the interactive portion of the flow, where the user takes action, depending on the policy.

Nessa solicitação, o cliente indica as permissões que precisa adquirir do usuário no parâmetro scope e a política a ser executada no parâmetro p.In this request, the client indicates the permissions that it needs to acquire from the user in the scope parameter and the policy to execute in the p parameter. Três exemplos são fornecidos nas seções a seguir (com quebras de linha para facilitar a leitura), cada um com uma política diferente.Three examples are provided in the following sections (with line breaks for readability), each using a different policy. Para ter uma ideia de como funciona cada solicitação, tente colar a solicitação em um navegador e executá-lo.To get a feel for how each request works, try pasting the request into a browser and running it.

Usar uma política de entradaUse a sign-in policy

GET https://login.microsoftonline.com/fabrikamb2c.onmicrosoft.com/oauth2/v2.0/authorize?
client_id=90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6
&response_type=code+id_token
&redirect_uri=https%3A%2F%2Faadb2cplayground.azurewebsites.net%2F
&response_mode=form_post
&scope=openid%20offline_access
&state=arbitrary_data_you_can_receive_in_the_response
&nonce=12345
&p=b2c_1_sign_in

Usar uma política de inscriçãoUse a sign-up policy

GET https://login.microsoftonline.com/fabrikamb2c.onmicrosoft.com/oauth2/v2.0/authorize?
client_id=90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6
&response_type=code+id_token
&redirect_uri=https%3A%2F%2Faadb2cplayground.azurewebsites.net%2F
&response_mode=form_post
&scope=openid%20offline_access
&state=arbitrary_data_you_can_receive_in_the_response
&nonce=12345
&p=b2c_1_sign_up

Usar uma política de edição de perfilUse an edit-profile policy

GET https://login.microsoftonline.com/fabrikamb2c.onmicrosoft.com/oauth2/v2.0/authorize?
client_id=90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6
&response_type=code+id_token
&redirect_uri=https%3A%2F%2Faadb2cplayground.azurewebsites.net%2F
&response_mode=form_post
&scope=openid%20offline_access
&state=arbitrary_data_you_can_receive_in_the_response
&nonce=12345
&p=b2c_1_edit_profile
ParâmetroParameter Obrigatório?Required? DescriçãoDescription
client_idclient_id ObrigatórioRequired A ID do aplicativo que o portal do Azure atribuiu a seu aplicativo.The application ID that the Azure portal assigned to your app.
response_typeresponse_type ObrigatórioRequired O tipo de resposta, que deve incluir token de ID para o OpenID Connect.The response type, which must include an ID token for OpenID Connect. Se seu aplicativo Web também precisa de tokens para chamar uma API Web, você pode usar code+id_token, como fizemos aqui.If your web app also needs tokens for calling a web API, you can use code+id_token, as we've done here.
redirect_uriredirect_uri RecomendadasRecommended O parâmetro redirect_uri do seu aplicativo, em que as respostas de autenticação podem ser enviadas e recebidas pelo aplicativo.The redirect_uri parameter of your app, where authentication responses can be sent and received by your app. Ele deve corresponder exatamente a um dos parâmetros redirect_uri que você registrou no portal, com exceção de que ele deve ser codificado por URL.It must exactly match one of the redirect_uri parameters that you registered in the portal, except that it must be URL encoded.
scopescope ObrigatórioRequired Uma lista de escopos separados por espaços.A space-separated list of scopes. Um único valor de escopo indica ao Azure AD ambas as permissões que estão sendo solicitadas.A single scope value indicates to Azure AD both permissions that are being requested. O escopo openid indica uma permissão para conectar o usuário e obter dados sobre ele na forma de tokens de ID (falaremos mais sobre isso posteriormente neste artigo).The openid scope indicates a permission to sign in the user and get data about the user in the form of ID tokens (more to come on this later in the article). O escopo offline_access é opcional para aplicativos Web.The offline_access scope is optional for web apps. Ele indica que seu aplicativo precisará de um token de atualização para obter acesso de longa duração aos recursos.It indicates that your app will need a refresh token for long-lived access to resources.
response_moderesponse_mode RecomendadasRecommended O método que deve ser usado para enviar o código de autorização resultante de volta ao aplicativo.The method that should be used to send the resulting authorization code back to your app. Ele pode ser query, form_post ou fragment.It can be either query, form_post, or fragment. O modo de resposta form_post é recomendado para maior segurança.The form_post response mode is recommended for best security.
statestate RecomendadasRecommended Um valor incluído na solicitação que também retorna na resposta do token.A value included in the request that is also returned in the token response. Pode ser uma cadeia de caracteres de qualquer conteúdo desejado.It can be a string of any content that you want. Um valor exclusivo gerado aleatoriamente que normalmente é usado para impedir ataques de solicitação intersite forjada.A randomly generated unique value is typically used for preventing cross-site request forgery attacks. O estado também é usado para codificar as informações sobre o estado do usuário no aplicativo antes da solicitação de autenticação ocorrida, como a página em que ele estava.The state is also used to encode information about the user's state in the app before the authentication request occurred, such as the page they were on.
noncenonce ObrigatórioRequired Um valor incluído na solicitação(gerado pelo aplicativo) que será incluído no token de ID resultante como uma declaração.A value included in the request (generated by the app) that will be included in the resulting ID token as a claim. O aplicativo pode verificar esse valor para reduzir os ataques de reprodução de token.The app can then verify this value to mitigate token replay attacks. Normalmente, o valor é uma cadeia de caracteres aleatória e exclusiva que pode ser usada para identificar a origem da solicitação.The value is typically a randomized unique string that can be used to identify the origin of the request.
pp ObrigatórioRequired A política que será executada.The policy that will be executed. É o nome de uma política criada no locatário B2C.It is the name of a policy that is created in your B2C tenant. O valor do nome da política deve começar com b2c\_1\_.The policy name value should begin with b2c\_1\_. Saiba mais sobre as políticas e a estrutura de política extensível.Learn more about policies and the extensible policy framework.
promptprompt OpcionalOptional O tipo de interação do usuário que é necessário.The type of user interaction that is required. O único valor válido no momento é login, que força o usuário a inserir suas credenciais nessa solicitação.The only valid value at this time is login, which forces the user to enter their credentials on that request. O logon único não terá efeito.Single sign-on will not take effect.

Nesse momento, é solicitado que o usuário conclua o fluxo de trabalho da política.At this point, the user is asked to complete the policy's workflow. Isso pode exigir que o usuário insira seu nome de usuário e senha, entre com uma identidade social, inscreva-se no diretório ou outras etapas, dependendo de como a política está definida.This might involve the user entering their username and password, signing in with a social identity, signing up for the directory, or any other number of steps, depending on how the policy is defined.

Depois que o usuário conclui a política, o Azure AD retorna uma resposta ao seu aplicativo no parâmetro redirect_uri indicado, usando o método especificado no parâmetro response_mode.After the user completes the policy, Azure AD returns a response to your app at the indicated redirect_uri parameter, by using the method that is specified in the response_mode parameter. A resposta é a mesma para cada um dos casos anteriores, independentemente da política que é executada.The response is the same for each of the preceding cases, independent of the policy that is executed.

Uma resposta bem-sucedida usando response_mode=fragment se parece com esta:A successful response using response_mode=fragment would look like:

GET https://aadb2cplayground.azurewebsites.net/#
id_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...
&code=AwABAAAAvPM1KaPlrEqdFSBzjqfTGBCmLdgfSTLEMPGYuNHSUYBrq...
&state=arbitrary_data_you_can_receive_in_the_response
ParâmetroParameter DescriçãoDescription
id_tokenid_token O token de ID que o aplicativo solicitou.The ID token that the app requested. Você pode usar o token de ID para verificar a identidade do usuário e iniciar uma sessão com o usuário.You can use the ID token to verify the user's identity and begin a session with the user. Mais detalhes sobre tokens de ID e respectivo conteúdo estão incluídos na referência de token do Azure AD B2C.More details on ID tokens and their contents are included in the Azure AD B2C token reference.
códigocode O código de autorização que o aplicativo solicitou, se você usou response_type=code+id_token.The authorization code that the app requested, if you used response_type=code+id_token. O aplicativo pode usar o código de autorização para solicitar um token de acesso para um recurso de destino.The app can use the authorization code to request an access token for a target resource. Os códigos de autorização têm uma duração muito curta.Authorization codes are very short-lived. Normalmente, eles expiram depois de cerca de 10 minutos.Typically, they expire after about 10 minutes.
statestate Se um parâmetro state estiver incluído na solicitação, o mesmo valor deverá aparecer na resposta.If a state parameter is included in the request, the same value should appear in the response. O aplicativo deve verificar se os valores state na solicitação e na resposta são idênticos.The app should verify that the state values in the request and response are identical.

As respostas de erro também podem ser enviadas ao parâmetro redirect_uri para que o aplicativo possa tratá-las adequadamente:Error responses can also be sent to the redirect_uri parameter so that the app can handle them appropriately:

GET https://aadb2cplayground.azurewebsites.net/#
error=access_denied
&error_description=the+user+canceled+the+authentication
&state=arbitrary_data_you_can_receive_in_the_response
ParâmetroParameter DescriçãoDescription
errorerror Uma cadeia de caracteres de códigos de erro que pode ser usada para classificar tipos de erro que ocorrem e pode ser usada para responder aos erros.An error-code string that can be used to classify types of errors that occur and that can be used to react to errors.
error_descriptionerror_description Uma mensagem de erro específica que pode ajudar um desenvolvedor a identificar a causa raiz de um erro de autenticação.A specific error message that can help a developer identify the root cause of an authentication error.
statestate Confira a descrição completa da primeira tabela nesta seção.See the full description in the first table in this section. Se um parâmetro state estiver incluído na solicitação, o mesmo valor deverá aparecer na resposta.If a state parameter is included in the request, the same value should appear in the response. O aplicativo deve verificar se os valores state na solicitação e resposta são idênticos.The app should verify that the state values in the request and response are identical.

Validar o token de IDValidate the ID token

Apenas o recebimento de um tokend de ID não é suficiente para autenticar o usuário.Just receiving an ID token is not enough to authenticate the user. Você deve validar a assinatura do token de ID e verificar as declarações no token, de acordo com os requisitos do seu aplicativo.You must validate the ID token's signature and verify the claims in the token per your app's requirements. O Azure AD B2C usa JWTs (Tokens Web JSON) e criptografia de chave pública para assinar tokens e verificar se eles são válidos.Azure AD B2C uses JSON Web Tokens (JWTs) and public key cryptography to sign tokens and verify that they are valid.

Há muitas bibliotecas de software livre para validar JWTs dependendo do idioma de preferência.There are many open-source libraries that are available for validating JWTs, depending on your language of preference. Recomendamos que você explore essas opções em vez de implementar a sua própria lógica de validação.We recommend exploring those options rather than implementing your own validation logic. As informações aqui serão úteis para descobrir como usar essas bibliotecas adequadamente.The information here will be useful in figuring out how to properly use those libraries.

O Azure AD B2C tem um ponto de extremidade de metadados do OpenID Connect, que permite a um aplicativo buscar informações sobre o Azure AD B2C no tempo de execução.Azure AD B2C has an OpenID Connect metadata endpoint, which allows an app to fetch information about Azure AD B2C at runtime. Essas informações incluem pontos de extremidade, conteúdos de token e chaves de assinatura de token.This information includes endpoints, token contents, and token signing keys. Há um documento de metadados JSON para cada política no seu locatário de B2C.There is a JSON metadata document for each policy in your B2C tenant. Por exemplo, o documento de metadados para a política b2c_1_sign_in em fabrikamb2c.onmicrosoft.com está localizado em:For example, the metadata document for the b2c_1_sign_in policy in fabrikamb2c.onmicrosoft.com is located at:

https://login.microsoftonline.com/fabrikamb2c.onmicrosoft.com/v2.0/.well-known/openid-configuration?p=b2c_1_sign_in

Uma das propriedades desse documento de configuração é a jwks_uri, cujo valor para a mesma política seria:One of the properties of this configuration document is jwks_uri, whose value for the same policy would be:

https://login.microsoftonline.com/fabrikamb2c.onmicrosoft.com/discovery/v2.0/keys?p=b2c_1_sign_in.https://login.microsoftonline.com/fabrikamb2c.onmicrosoft.com/discovery/v2.0/keys?p=b2c_1_sign_in.

Para determinar qual política foi usada na assinatura de um token de ID (e onde buscar os metadados), você tem duas opções.To determine which policy was used in signing an ID token (and from where to fetch the metadata), you have two options. Primeiro, o nome da política é incluído na declaração acr no token de ID.First, the policy name is included in the acr claim in the ID token. Para obter informações sobre como analisar as declarações de um token de ID, consulte a Referência de token do Azure AD B2C.For information on how to parse the claims from an ID token, see the Azure AD B2C token reference. A outra opção é codificar a política no valor do parâmetro state quando você emitir a solicitação e, em seguida, decodificá-lo para determinar qual política foi usada.Your other option is to encode the policy in the value of the state parameter when you issue the request, and then decode it to determine which policy was used. Ambos os métodos são válidos.Either method is valid.

Depois que tiver adquirido o documento de metadados do ponto de extremidade de metadados do OpenID Connect, você poderá usar as chaves públicas RSA 256 (localizadas nesse ponto de extremidade) para validar a assinatura do token de ID.After you've acquired the metadata document from the OpenID Connect metadata endpoint, you can use the RSA 256 public keys (which are located at this endpoint) to validate the signature of the ID token. Poderá haver várias chaves listadas nesse ponto de extremidade em qualquer ponto no tempo, cada uma identificada por uma declaração kid.There might be multiple keys listed at this endpoint at any given point in time, each identified by a kid claim. O cabeçalho do token de ID também contém uma declaração kid, que indica quais dessas chaves foi usada para assinar o token de ID.The header of the ID token also contains a kid claim, which indicates which of these keys was used to sign the ID token. Para obter mais informações, consulte a referência de token do Azure AD B2C (especialmente a seção validando tokens).For more information, see the Azure AD B2C token reference (the section on validating tokens, in particular).

Depois de validar a assinatura do token de ID, há várias declarações que você precisa verificar.After you've validated the signature of the ID token, there are several claims that you need to verify. Por exemplo:For instance:

  • Você deve validar a declaração nonce para evitar ataques de reprodução de token.You should validate the nonce claim to prevent token replay attacks. Seu valor deve ser o que você especificou na solicitação de conexão.Its value should be what you specified in the sign-in request.
  • Você deve validar a declaração aud para garantir que o token de ID foi emitido para o seu aplicativo.You should validate the aud claim to ensure that the ID token was issued for your app. Seu valor deve ser a ID do aplicativo do seu aplicativo.Its value should be the application ID of your app.
  • Você deve validar as declarações iat e exp para garantir que o token de ID não tenha se expirado.You should validate the iat and exp claims to ensure that the ID token has not expired.

Também há várias outras validações que devem ser realizadas.There are also several more validations that you should perform. Elas estão descritas detalhadamente nas Especificações básicas do OpenID Connect. Talvez você também queira validar declarações adicionais, dependendo do cenário.These are described in detail in the OpenID Connect Core Spec. You might also want to validate additional claims, depending on your scenario. Algumas validações comuns incluem:Some common validations include:

  • A garantia de que o usuário/organização tenha feito inscrição para usar o aplicativo.Ensuring that the user/organization has signed up for the app.
  • A garantia de que o usuário tenha a autorização/os privilégios adequados.Ensuring that the user has proper authorization/privileges.
  • A garantia de que uma determinada intensidade de autenticação tenha ocorrido, como a Autenticação Multifator do Azure.Ensuring that a certain strength of authentication has occurred, such as Azure Multi-Factor Authentication.

Para obter mais informações sobre as declarações em um token de ID, consulte a referência de token do Azure AD B2C.For more information on the claims in an ID token, see the Azure AD B2C token reference.

Após validar o token de ID, você poderá iniciar uma sessão com o usuário.After you have validated the ID token, you can begin a session with the user. Você pode usar as declarações no token de ID para obter informações sobre o usuário em seu aplicativo.You can use the claims in the ID token to obtain information about the user in your app. Os usos para essas informações incluem exibição, registros e autorização.Uses for this information include display, records, and authorization.

Obter um tokenGet a token

Se você precisar de seu aplicativo Web somente para executar as políticas, você poderá ignorar as próximas seções.If you need your web app to only execute policies, you can skip the next few sections. Essas seções serão aplicáveis somente aos aplicativos Web que precisarem fazer chamadas autenticadas a uma API Web e que também sejam protegidas pelo Azure AD B2C.These sections are applicable only to web apps that need to make authenticated calls to a web API and are also protected by Azure AD B2C.

Você pode resgatar o código de autorização adquirido (usando response_type=code+id_token) para um token do recurso desejado enviando uma solicitação POST ao ponto de extremidade /token.You can redeem the authorization code that you acquired (by using response_type=code+id_token) for a token to the desired resource by sending a POST request to the /token endpoint. Atualmente, o único recurso para o qual você pode solicitar um token é a própria API Web de back-end do aplicativo.Currently, the only resource that you can request a token for is your app's own back-end web API. A convenção para solicitar um token para si mesmo é usar a ID do cliente do aplicativo como o escopo:The convention for requesting a token to yourself is to use your app's client ID as the scope:

POST fabrikamb2c.onmicrosoft.com/oauth2/v2.0/token?p=b2c_1_sign_in HTTP/1.1
Host: https://login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code&client_id=90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6&scope=90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6 offline_access&code=AwABAAAAvPM1KaPlrEqdFSBzjqfTGBCmLdgfSTLEMPGYuNHSUYBrq...&redirect_uri=urn:ietf:wg:oauth:2.0:oob&client_secret=<your-application-secret>
ParâmetroParameter Obrigatório?Required? DescriçãoDescription
pp ObrigatórioRequired A política que foi usada para adquirir o código de autorização.The policy that was used to acquire the authorization code. Você não poderá usar uma política diferente nessa solicitação.You cannot use a different policy in this request. Observe que esse parâmetro é adicionado à cadeia de caracteres de consulta e não ao corpo do POST.Note that you add this parameter to the query string, not to the POST body.
client_idclient_id ObrigatórioRequired A ID do aplicativo que o portal do Azure atribuiu a seu aplicativo.The application ID that the Azure portal assigned to your app.
grant_typegrant_type ObrigatórioRequired O tipo de concessão, que deve ser authorization_code para o fluxo do código de autorização.The type of grant, which must be authorization_code for the authorization code flow.
scopescope RecomendadasRecommended Uma lista de escopos separados por espaços.A space-separated list of scopes. Um único valor de escopo indica ao Azure AD ambas as permissões que estão sendo solicitadas.A single scope value indicates to Azure AD both permissions that are being requested. O escopo openid indica uma permissão para conectar o usuário e obter dados sobre ele na forma de parâmetros de id_token.The openid scope indicates a permission to sign in the user and get data about the user in the form of id_token parameters. Ele pode ser usado para obter tokens para a própria API Web de back-end do seu aplicativo, representado pela mesma ID do aplicativo que o cliente.It can be used to get tokens to your app's own back-end web API, which is represented by the same application ID as the client. O escopo offline_access indica que o aplicativo precisará de um token de atualização para acessar os recursos de longa duração.The offline_access scope indicates that your app will need a refresh token for long-lived access to resources.
códigocode ObrigatórioRequired O código de autorização que você adquiriu no primeiro segmento do fluxo.The authorization code that you acquired in the first leg of the flow.
redirect_uriredirect_uri ObrigatórioRequired O parâmetro redirect_uri do aplicativo em que você recebeu o código de autorização.The redirect_uri parameter of the application where you received the authorization code.
client_secretclient_secret ObrigatórioRequired O segredo do aplicativo gerado no portal do Azure.The application secret that you generated in the Azure portal. O segredo do aplicativo é um artefato de segurança importante.This application secret is an important security artifact. Você deve armazená-lo com segurança no servidor.You should store it securely on your server. Você também deve circular esse segredo do cliente em intervalos periódicos.You should also rotate this client secret on a periodic basis.

Uma resposta de token bem-sucedida tem a seguinte aparência:A successful token response looks like:

{
    "not_before": "1442340812",
    "token_type": "Bearer",
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...",
    "scope": "90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6 offline_access",
    "expires_in": "3600",
    "refresh_token": "AAQfQmvuDy8WtUv-sd0TBwWVQs1rC-Lfxa_NDkLqpg50Cxp5Dxj0VPF1mx2Z...",
}
ParâmetroParameter DescriçãoDescription
not_beforenot_before A hora em que o token é considerado válido, nos valores de hora da época.The time at which the token is considered valid, in epoch time.
token_typetoken_type O valor do tipo de token.The token type value. O único tipo com suporte do Azure AD é o Bearer.The only type that Azure AD supports is Bearer.
access_tokenaccess_token O token JWT assinado que você solicitou.The signed JWT token that you requested.
scopescope Os escopos para os quais o token é válido.The scopes for which the token is valid. Eles podem ser usados para o cache de tokens para uso posterior.These can be used for caching tokens for later use.
expires_inexpires_in O período de tempo pelo qual o token de acesso é válido (em segundos).The length of time that the access token is valid (in seconds).
refresh_tokenrefresh_token Um token de atualização do OAuth 2.0.An OAuth 2.0 refresh token. O aplicativo pode usar esse token para adquirir tokens de acesso adicionais depois que o atual expirar.The app can use this token to acquire additional tokens after the current token expires. Os tokens de atualização têm longa duração e podem ser usados para reter acesso a recursos por períodos estendidos.Refresh tokens are long-lived and can be used to retain access to resources for extended periods of time. Para obter mais detalhes, consulte a referência de token B2C.For more details, refer to the B2C token reference. Observe que você deve ter usado o escopo offline_access tanto na autorização quanto nas solicitações de token para receber um token de atualização.Note that you must have used the scope offline_access in both the authorization and token requests in order to receive a refresh token.

As respostas de erro se parecem com:Error responses look like:

{
    "error": "access_denied",
    "error_description": "The user revoked access to the app.",
}
ParâmetroParameter DescriçãoDescription
errorerror Uma cadeia de caracteres de códigos de erro que pode ser usada para classificar tipos de erro que ocorrem e pode ser usada para responder aos erros.An error-code string that can be used to classify types of errors that occur and that can be used to react to errors.
error_descriptionerror_description Uma mensagem de erro específica que pode ajudar um desenvolvedor a identificar a causa raiz de um erro de autenticação.A specific error message that can help a developer identify the root cause of an authentication error.

Usar o tokenUse the token

Agora que adquiriu um token de acesso com êxito, você poderá usá-lo em solicitações às suas APIs Web de back-end incluindo-o no cabeçalho Authorization:Now that you've successfully acquired an access token, you can use the token in requests to your back-end web APIs by including it in the Authorization header:

GET /tasks
Host: https://mytaskwebapi.com
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...

Atualizar o tokenRefresh the token

Os tokens de ID têm vida curta.ID tokens are short-lived. Você deve atualizá-los depois que eles expirarem para poder continuar a acessar os recursos.You must refresh them after they expire to continue being able to access resources. Faça isso enviando outra solicitação POST ao ponto de extremidade /token.You can do so by submitting another POST request to the /token endpoint. Desta vez, forneça o parâmetro refresh_token em vez do parâmetro code:This time, provide the refresh_token parameter instead of the code parameter:

POST fabrikamb2c.onmicrosoft.com/oauth2/v2.0/token?p=b2c_1_sign_in HTTP/1.1
Host: https://login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded

grant_type=refresh_token&client_id=90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6&scope=openid offline_access&refresh_token=AwABAAAAvPM1KaPlrEqdFSBzjqfTGBCmLdgfSTLEMPGYuNHSUYBrq...&redirect_uri=urn:ietf:wg:oauth:2.0:oob&client_secret=<your-application-secret>
ParâmetroParameter ObrigatórioRequired DescriçãoDescription
pp ObrigatórioRequired A política que foi usada para adquirir o token de atualização original.The policy that was used to acquire the original refresh token. Você não poderá usar uma política diferente nessa solicitação.You cannot use a different policy in this request. Observe que esse parâmetro é adicionado à cadeia de caracteres de consulta e não ao corpo do POST.Note that you add this parameter to the query string, not to the POST body.
client_idclient_id ObrigatórioRequired A ID do aplicativo que o portal do Azure atribuiu a seu aplicativo.The application ID that the Azure portal assigned to your app.
grant_typegrant_type ObrigatórioRequired O tipo de concessão, que deve ser um token de atualização para esse segmento do fluxo do código de autorização.The type of grant, which must be a refresh token for this leg of the authorization code flow.
scopescope RecomendadasRecommended Uma lista de escopos separados por espaços.A space-separated list of scopes. Um único valor de escopo indica ao Azure AD ambas as permissões que estão sendo solicitadas.A single scope value indicates to Azure AD both permissions that are being requested. O escopo openid indica uma permissão para conectar o usuário e obter dados sobre ele na forma de tokens de ID.The openid scope indicates a permission to sign in the user and get data about the user in the form of ID tokens. Ele pode ser usado para obter tokens para a própria API Web de back-end do seu aplicativo, representado pela mesma ID do aplicativo que o cliente.It can be used to get tokens to your app's own back-end web API, which is represented by the same application ID as the client. O escopo offline_access indica que o aplicativo precisará de um token de atualização para acessar os recursos de longa duração.The offline_access scope indicates that your app will need a refresh token for long-lived access to resources.
redirect_uriredirect_uri RecomendadasRecommended O parâmetro redirect_uri do aplicativo em que você recebeu o código de autorização.The redirect_uri parameter of the application where you received the authorization code.
refresh_tokenrefresh_token ObrigatórioRequired O token de atualização original que você adquiriu na segunda ramificação do fluxo.The original refresh token that you acquired in the second leg of the flow. Observe que você deve ter usado o escopo offline_access tanto na autorização quanto nas solicitações de token para receber um token de atualização.Note that you must have used the scope offline_access in both the authorization and token requests in order to receive a refresh token.
client_secretclient_secret ObrigatórioRequired O segredo do aplicativo gerado no portal do Azure.The application secret that you generated in the Azure portal. O segredo do aplicativo é um artefato de segurança importante.This application secret is an important security artifact. Você deve armazená-lo com segurança no servidor.You should store it securely on your server. Você também deve circular esse segredo do cliente em intervalos periódicos.You should also rotate this client secret on a periodic basis.

Uma resposta de token bem-sucedida tem a seguinte aparência:A successful token response looks like:

{
    "not_before": "1442340812",
    "token_type": "Bearer",
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...",
    "scope": "90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6 offline_access",
    "expires_in": "3600",
    "refresh_token": "AAQfQmvuDy8WtUv-sd0TBwWVQs1rC-Lfxa_NDkLqpg50Cxp5Dxj0VPF1mx2Z...",
}
ParâmetroParameter DescriçãoDescription
not_beforenot_before A hora em que o token é considerado válido, nos valores de hora da época.The time at which the token is considered valid, in epoch time.
token_typetoken_type O valor do tipo de token.The token type value. O único tipo com suporte do Azure AD é o Bearer.The only type that Azure AD supports is Bearer.
access_tokenaccess_token O token JWT assinado que você solicitou.The signed JWT token that you requested.
scopescope O escopo para o qual o token é válido, que pode ser usado no cache de tokens para uso posterior.The scope that the token is valid for, which can be used for caching tokens for later use.
expires_inexpires_in O período de tempo pelo qual o token de acesso é válido (em segundos).The length of time that the access token is valid (in seconds).
refresh_tokenrefresh_token Um token de atualização do OAuth 2.0.An OAuth 2.0 refresh token. O aplicativo pode usar esse token para adquirir tokens de acesso adicionais depois que o atual expirar.The app can use this token to acquire additional tokens after the current token expires. Os tokens de atualização têm longa duração e podem ser usados para reter acesso a recursos por períodos estendidos.Refresh tokens are long-lived and can be used to retain access to resources for extended periods of time. Para obter mais detalhes, consulte a referência ao token B2C.For more detail, refer to the B2C token reference.

As respostas de erro se parecem com:Error responses look like:

{
    "error": "access_denied",
    "error_description": "The user revoked access to the app.",
}
ParâmetroParameter DescriçãoDescription
errorerror Uma cadeia de caracteres de códigos de erro que pode ser usada para classificar tipos de erro que ocorrem e pode ser usada para responder aos erros.An error-code string that can be used to classify types of errors that occur and that can be used to react to errors.
error_descriptionerror_description Uma mensagem de erro específica que pode ajudar um desenvolvedor a identificar a causa raiz de um erro de autenticação.A specific error message that can help a developer identify the root cause of an authentication error.

Enviar uma solicitação de saídaSend a sign-out request

Quando você deseja conectar o usuário do aplicativo, não é suficiente limpar os cookies do aplicativo e encerrar a sessão do usuário.When you want to sign the user out of the app, it is not enough to clear your app's cookies or otherwise end the session with the user. Você também deve redirecionar o usuário ao Azure AD para sair. Se você não conseguir fazer isso, é provável que o usuário consiga se autenticar novamente no aplicativo sem ter que reinserir as credenciais.You must also redirect the user to Azure AD to sign out. If you fail to do so, the user might be able to reauthenticate to your app without entering their credentials again. Isso ocorre porque eles terão uma sessão de logon único válida com o Azure AD.This is because they will have a valid single sign-on session with Azure AD.

Você pode simplesmente redirecionar o usuário para o ponto de extremidade end_session listado no documento de metadados do OpenID Connect descrito anteriormente na seção “Validar o token de ID”:You can simply redirect the user to the end_session endpoint that is listed in the OpenID Connect metadata document described earlier in the "Validate the ID token" section:

GET https://login.microsoftonline.com/fabrikamb2c.onmicrosoft.com/oauth2/v2.0/logout?
p=b2c_1_sign_in
&post_logout_redirect_uri=https%3A%2F%2Faadb2cplayground.azurewebsites.net%2F
ParâmetroParameter Obrigatório?Required? DescriçãoDescription
pp ObrigatórioRequired A política que você deseja usar para desconectar o usuário de seu aplicativo.The policy that you want to use to sign the user out of your application.
post_logout_redirect_uripost_logout_redirect_uri RecomendadasRecommended A URL para a qual o usuário deve ser redirecionado após a saída com êxito. Se não for incluída, o Azure AD B2C mostrará uma mensagem genérica ao usuário.The URL that the user should be redirected to after successful sign-out. If it is not included, Azure AD B2C shows the user a generic message.

Observação

Embora o direcionamento do usuário para o ponto de extremidade end_session remova algum dos estados de logon único do usuário com o Azure AD B2C, ele não o desconectará da sessão de IDP (provedor de identidade) social.Although directing the user to the end_session endpoint will clear some of the user's single sign-on state with Azure AD B2C, it will not sign the user out of their social identity provider (IDP) session. Se o usuário selecionar o mesmo IDP durante uma conexão posterior, ele será autenticados novamente sem precisar inserir suas credenciais.If the user selects the same IDP during a subsequent sign-in, they will be reauthenticated, without entering their credentials. Se um usuário deseja sair do seu aplicativo B2C, isso não significa, necessariamente, que ele deseja desconectar-se de sua conta do Facebook.If a user wants to sign out of your B2C application, it does not necessarily mean they want to sign out of their Facebook account. No entanto, no caso de contas locais, a sessão do usuário será encerrada corretamente.However, in the case of local accounts, the user's session will be ended properly.

Usar seu próprio locatário B2CUse your own B2C tenant

Se você quiser experimentar essas solicitações por conta própria, primeiro deverá seguir estas três etapas e, em seguida, substituir os valores descritos anteriormente pelos seus próprios valores:If you want to try these requests for yourself, you must first perform these three steps, and then replace the example values described earlier with your own:

  1. Criar um locatário de B2Ce usar o nome do seu locatário nas solicitações.Create a B2C tenant, and use the name of your tenant in the requests.
  2. Criar um aplicativo para obter uma ID de aplicativo.Create an application to obtain an application ID. Inclui um aplicativo Web/uma API Web em seu aplicativo.Include a web app/web API in your app. Opcionalmente, criar um segredo do aplicativo.Optionally, create an application secret.
  3. Criar suas regras para obter os nomes de política.Create your policies to obtain your policy names.