Entrada na Web com o OpenID Connect no Azure Active Directory B2CWeb sign-in with OpenID Connect in Azure Active Directory B2C

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. Esse protocolo de autenticação permite que você execute o logon único.This authentication protocol allows you to perform single sign-on. Ele apresenta o conceito de token de ID, 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 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, ele também permite que os aplicativos adquiram tokens de acessocom segurança.Because it extends OAuth 2.0, it also enables applications to securely acquire access tokens. Você pode usar tokens de acesso 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. O OpenID Connect é recomendado se você estiver criando um aplicativo Web hospedado em um servidor e acessado por meio de um navegador.OpenID Connect is recommended if you're building a web application that's hosted on a server and accessed through a browser. Para obter mais informações sobre tokens, consulte a visão geral dos tokens no Azure Active Directory B2CFor more information about tokens, see the Overview of tokens in Azure Active Directory B2C

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 fluxo de usuário, que permite que você use o OpenID Connect para adicionar experiências de usuário ao seu aplicativo, como inscrição, entrada e gerenciamento de perfil.It introduces the user flow parameter, which enables you to use OpenID Connect to add user experiences to your application, such as sign-up, sign-in, and profile management.

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

Quando seu aplicativo Web precisa autenticar o usuário e executar um fluxo de usuário, ele pode direcionar o usuário para o /authorize ponto de extremidade.When your web application needs to authenticate the user and run a user flow, it can direct the user to the /authorize endpoint. O usuário executa a ação dependendo do fluxo do usuário.The user takes action depending on the user flow.

Nessa solicitação, o cliente indica as permissões que precisa adquirir do usuário no scope parâmetro e especifica o fluxo de usuário a ser executado.In this request, the client indicates the permissions that it needs to acquire from the user in the scope parameter, and specifies the user flow to run. Para ter uma ideia de como a solicitação funciona, tente colar a solicitação em um navegador e executá-la.To get a feel for how the request works, try pasting the request into a browser and running it. Substitua {tenant} pelo nome do seu locatário.Replace {tenant} with the name of your tenant. Substitua 90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6 pela ID do aplicativo que você registrou anteriormente em seu locatário.Replace 90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6 with the app ID of the application you've previously registered in your tenant. Além disso, altere o nome da política ( {policy} ) para o nome da política que você tem em seu locatário, por exemplo b2c_1_sign_in .Also change the policy name ({policy}) to the policy name that you have in your tenant, for example b2c_1_sign_in.

GET https://{tenant}.b2clogin.com/{tenant}.onmicrosoft.com/{policy}/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
ParâmetroParameter ObrigatórioRequired DescriçãoDescription
vários{tenant} YesYes Nome do seu locatário de Azure AD B2CName of your Azure AD B2C tenant
regras{policy} YesYes O fluxo do usuário a ser executado.The user flow to be run. Especifique o nome de um fluxo de usuário que você criou em seu locatário Azure AD B2C.Specify the name of a user flow you've created in your Azure AD B2C tenant. Por exemplo: b2c_1_sign_in, b2c_1_sign_up ou b2c_1_edit_profileFor example: b2c_1_sign_in, b2c_1_sign_up, or b2c_1_edit_profile.
client_idclient_id YesYes A ID do aplicativo que o portal do Azure atribuído ao seu aplicativo.The application ID that the Azure portal assigned to your application.
noncenonce YesYes Um valor incluído na solicitação (gerado pelo aplicativo) que é incluído no token de ID resultante como uma declaração.A value included in the request (generated by the application) that is included in the resulting ID token as a claim. O aplicativo pode, então, verificar esse valor para atenuar os ataques de reprodução de token.The application 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.
response_typeresponse_type YesYes Deve incluir um token de ID para o OpenID Connect.Must include an ID token for OpenID Connect. Se o aplicativo Web também precisar de tokens para chamar uma API da Web, você poderá usar o code+id_token .If your web application also needs tokens for calling a web API, you can use code+id_token.
escoposcope YesYes Uma lista de escopos separados por espaços.A space-separated list of scopes. O escopo openid indica uma permissão para entrar no 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. O offline_access escopo é opcional para aplicativos Web.The offline_access scope is optional for web applications. Isso indica que seu aplicativo precisará de um token de atualização para acesso estendido aos recursos.It indicates that your application will need a refresh token for extended access to resources.
promptprompt NoNo O tipo de interação do usuário que é necessária.The type of user interaction that's 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.
redirect_uriredirect_uri NoNo O redirect_uri parâmetro do seu aplicativo, em que as respostas de autenticação podem ser enviadas e recebidas pelo seu aplicativo.The redirect_uri parameter of your application, where authentication responses can be sent and received by your application. Ele deve corresponder exatamente a um dos redirect_uri parâmetros que você registrou na portal do Azure, exceto que ele deve ser codificado por URL.It must exactly match one of the redirect_uri parameters that you registered in the Azure portal, except that it must be URL encoded.
response_moderesponse_mode NoNo O método usado para enviar o código de autorização resultante de volta para seu aplicativo.The method that is used to send the resulting authorization code back to your application. 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 NoNo Um valor incluído na solicitação que também é retornado na resposta do token.A value included in the request that's 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 informações sobre o estado do usuário no aplicativo antes que a solicitação de autenticação ocorra, como a página em que eles estavam.The state is also used to encode information about the user's state in the application before the authentication request occurred, such as the page they were on.

Neste ponto, o usuário é solicitado a concluir o fluxo de trabalho.At this point, the user is asked to complete the workflow. O usuário pode precisar inserir seu nome de usuário e senha, entrar com uma identidade social ou inscrever-se no diretório.The user might have to enter their username and password, sign in with a social identity, or sign up for the directory. Pode haver qualquer outro número de etapas, dependendo de como o fluxo do usuário é definido.There could be any other number of steps depending on how the user flow is defined.

Depois que o usuário conclui o fluxo do usuário, uma resposta é retornada ao seu aplicativo no redirect_uri parâmetro indicado, usando o método especificado no response_mode parâmetro.After the user completes the user flow, a response is returned to your application at the indicated redirect_uri parameter, by using the method that's specified in the response_mode parameter. A resposta é a mesma para cada um dos casos anteriores, independentemente do fluxo do usuário.The response is the same for each of the preceding cases, independent of the user flow.

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 application 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.
codecode O código de autorização que o aplicativo solicitou, se você usou response_type=code+id_token .The authorization code that the application 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 application can use the authorization code to request an access token for a target resource. Os códigos de autorização normalmente expiram após cerca de 10 minutos.Authorization codes typically expire after about 10 minutes.
statestate Se um parâmetro state for 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 state valores na solicitação e na resposta são idênticos.The application should verify that the state values in the request and response are identical.

As respostas de erro também podem ser enviadas ao redirect_uri parâmetro para que o aplicativo possa tratá-las adequadamente:Error responses can also be sent to the redirect_uri parameter so that the application 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 Um código que pode ser usado para classificar os tipos de erros que ocorrem.A code that can be used to classify the types of errors that occur.
error_descriptionerror_description Uma mensagem de erro específica que pode ajudar a identificar a causa raiz de um erro de autenticação.A specific error message that can help identify the root cause of an authentication error.
statestate Se um parâmetro state for 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 state valores na solicitação e na resposta são idênticos.The application 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. Valide a assinatura do token de ID e verifique as declarações no token de acordo com os requisitos do seu aplicativo.Validate the ID token's signature and verify the claims in the token per your application'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.

Azure AD B2C tem um ponto de extremidade de metadados do OpenID Connect, que permite que um aplicativo Obtenha informações sobre Azure AD B2C em tempo de execução.Azure AD B2C has an OpenID Connect metadata endpoint, which allows an application to get 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 fluxo de usuário no locatário B2C.There is a JSON metadata document for each user flow in your B2C tenant. Por exemplo, o documento de metadados para o fluxo de usuário b2c_1_sign_in em fabrikamb2c.onmicrosoft.com está localizado em:For example, the metadata document for the b2c_1_sign_in user flow in fabrikamb2c.onmicrosoft.com is located at:

https://fabrikamb2c.b2clogin.com/fabrikamb2c.onmicrosoft.com/b2c_1_sign_in/v2.0/.well-known/openid-configuration

Uma das propriedades desse documento de configuração é a jwks_uri, cujo valor para o mesmo fluxo de usuário seria:One of the properties of this configuration document is jwks_uri, whose value for the same user flow would be:

https://fabrikamb2c.b2clogin.com/fabrikamb2c.onmicrosoft.com/b2c_1_sign_in/discovery/v2.0/keys

Para determinar qual fluxo de usuário foi usado na assinatura de um token de ID (e de onde obter os metadados), você tem duas opções.To determine which user flow was used in signing an ID token (and from where to get the metadata), you have two options. Primeiro, o nome do fluxo de usuário é incluído na declaração acr no token de ID.First, the user flow name is included in the acr claim in the ID token. A outra opção é codificar o fluxo de usuário no valor do parâmetro state quando você emitir a solicitação e, em seguida, decodificá-lo para determinar qual fluxo de usuário foi usado.Your other option is to encode the user flow in the value of the state parameter when you issue the request, and then decode it to determine which user flow was used. Ambos os métodos são válidos.Either method is valid.

Depois de adquirir o documento de metadados do ponto de extremidade de metadados do OpenID Connect, você pode usar as chaves públicas do RSA 256 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 to validate the signature of the ID token. Pode haver várias chaves listadas nesse ponto de extremidade, cada uma identificada por uma kid declaração.There might be multiple keys listed at this endpoint, 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 verificar os tokens de Azure AD B2C, você precisa gerar a chave pública usando o expoente (e) e o módulo (n).To verify the tokens from Azure AD B2C, you need to generate the public key using the exponent(e) and modulus(n). Você precisa determinar como fazer isso em sua respectiva linguagem de programação de acordo.You need to determine how to do this in your respective programming language accordingly. A documentação oficial sobre a geração de chave pública com o protocolo RSA pode ser encontrada aqui: https://tools.ietf.org/html/rfc3447#section-3.1The official documentation on Public Key generation with the RSA protocol can be found here: https://tools.ietf.org/html/rfc3447#section-3.1

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:

  • Valide a declaração nonce para evitar ataques de reprodução de token.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.
  • Valide a aud declaração para garantir que o token de ID foi emitido para seu aplicativo.Validate the aud claim to ensure that the ID token was issued for your application. Seu valor deve ser a ID do aplicativo do seu aplicativo.Its value should be the application ID of your application.
  • Valide as iat exp declarações e para garantir que o token de ID não tenha expirado.Validate the iat and exp claims to make sure that the ID token hasn't expired.

Também há várias outras validações que devem ser realizadas.There are also several more validations that you should perform. As validações são descritas em detalhes na especificação de núcleo do OpenID Connect. Você também pode querer validar declarações adicionais, dependendo do seu cenário.The validations 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:

  • Garantir que o usuário/organização tenha se inscrito no aplicativo.Ensuring that the user/organization has signed up for the application.
  • 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.

Depois de validar o token de ID, você pode iniciar uma sessão com o usuário.After you validate 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 application. 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 precisar que seu aplicativo Web execute apenas fluxos de usuário, você poderá ignorar as próximas seções.If you need your web application to only run user flows, you can skip the next few sections. Essas seções são aplicáveis somente a aplicativos Web que precisam fazer chamadas autenticadas para uma API da Web e também são protegidas por Azure AD B2C.These sections are applicable only to web applications 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. No Azure AD B2C, você pode solicitar tokens de acesso para outras APIs como de costume, especificando seus escopos na solicitação.In Azure AD B2C, you can request access tokens for other APIs as usual by specifying their scope(s) in the request.

Você também pode solicitar um token de acesso para a própria API Web de back-end do seu aplicativo por convenção de usar a ID do cliente do aplicativo como o escopo solicitado (o que resultará em um token de acesso com essa ID de cliente como o "público"):You can also request an access token for your app's own back-end Web API by convention of using the app's client ID as the requested scope (which will result in an access token with that client ID as the "audience"):

POST {tenant}.onmicrosoft.com/{policy}/oauth2/v2.0/token HTTP/1.1
Host: {tenant}.b2clogin.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
ParâmetroParameter ObrigatórioRequired DescriçãoDescription
vários{tenant} YesYes Nome do seu locatário de Azure AD B2CName of your Azure AD B2C tenant
regras{policy} YesYes O fluxo de usuário que foi usado para adquirir o código de autorização.The user flow that was used to acquire the authorization code. Você não pode usar um fluxo de usuário diferente nesta solicitação.You can't use a different user flow in this request. Adicione esse parâmetro à cadeia de caracteres de consulta, não ao corpo da POSTAgem.Add this parameter to the query string, not to the POST body.
client_idclient_id YesYes A ID do aplicativo que o portal do Azure atribuído ao seu aplicativo.The application ID that the Azure portal assigned to your application.
client_secretclient_secret Sim, em aplicativos WebYes, in Web Apps O segredo do aplicativo que foi gerado no portal do Azure.The application secret that was generated in the Azure portal. Os segredos do cliente são usados nesse fluxo para cenários de aplicativos Web, em que o cliente pode armazenar com segurança um segredo do cliente.Client secrets are used in this flow for Web App scenarios, where the client can securely store a client secret. Para cenários de aplicativo nativo (cliente público), os segredos do cliente não podem ser armazenados com segurança, portanto não são usados nesse fluxo.For Native App (public client) scenarios, client secrets cannot be securely stored, therefore not used on this flow. Se estiver usando um segredo do cliente, altere-o periodicamente.If using a client secret, please change it on a periodic basis.
codecode YesYes O código de autorização que você adquiriu no início do fluxo do usuário.The authorization code that you acquired in the beginning of the user flow.
grant_typegrant_type YesYes 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.
redirect_uriredirect_uri YesYes 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.
escoposcope NoNo Uma lista de escopos separados por espaços.A space-separated list of scopes. 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, que é representada pela mesma ID do aplicativo que o cliente.It can be used to get tokens to your application's own back-end web API, which is represented by the same application ID as the client. O offline_access escopo indica que seu aplicativo precisa de um token de atualização para acesso estendido aos recursos.The offline_access scope indicates that your application needs a refresh token for extended access to resources.

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. Bearer é o único tipo com suporte.Bearer is the only type that is supported.
access_tokenaccess_token O token JWT assinado que você solicitou.The signed JWT token that you requested.
escoposcope Os escopos para os quais o token é válido.The scopes for which the token is valid.
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 adicionais depois que o token atual expirar.The application can use this token to acquire additional tokens after the current token expires. Os tokens de atualização podem ser usados para manter o acesso aos recursos por longos períodos de tempo.Refresh tokens can be used to retain access to resources for extended periods of time. O escopo offline_access deve ter sido usado tanto na autorização quanto nas solicitações de token para receber um token de atualização.The scope offline_access must have been used 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 Um código que pode ser usado para classificar tipos de erros que ocorrem.A code that can be used to classify types of errors that occur.
error_descriptionerror_description Uma mensagem que pode ajudar a identificar a causa raiz de um erro de autenticação.A message that can help 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: mytaskwebapi.com
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...

Atualizar o tokenRefresh the token

Tokens de ID expiram em um curto período de tempo.ID tokens expire in a short period of time. Atualize os tokens depois que eles expirarem para continuar a ser capaz de acessar recursos.Refresh the tokens after they expire to continue being able to access resources. Você pode atualizar um token enviando outra POST solicitação ao /token ponto de extremidade.You can refresh a token 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 {tenant}.onmicrosoft.com/{policy}/oauth2/v2.0/token HTTP/1.1
Host: {tenant}.b2clogin.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
ParâmetroParameter ObrigatórioRequired DescriçãoDescription
vários{tenant} YesYes Nome do seu locatário de Azure AD B2CName of your Azure AD B2C tenant
regras{policy} YesYes O fluxo de usuário que foi usado para adquirir o token de atualização original.The user flow that was used to acquire the original refresh token. Você não pode usar um fluxo de usuário diferente nesta solicitação.You can't use a different user flow in this request. Adicione esse parâmetro à cadeia de caracteres de consulta, não ao corpo da POSTAgem.Add this parameter to the query string, not to the POST body.
client_idclient_id YesYes A ID do aplicativo que o portal do Azure atribuído ao seu aplicativo.The application ID that the Azure portal assigned to your application.
client_secretclient_secret Sim, em aplicativos WebYes, in Web Apps O segredo do aplicativo que foi gerado no portal do Azure.The application secret that was generated in the Azure portal. Os segredos do cliente são usados nesse fluxo para cenários de aplicativos Web, em que o cliente pode armazenar com segurança um segredo do cliente.Client secrets are used in this flow for Web App scenarios, where the client can securely store a client secret. Para cenários de aplicativo nativo (cliente público), os segredos do cliente não podem ser armazenados com segurança, portanto não são usados nesta chamada.For Native App (public client) scenarios, client secrets cannot be securely stored, therefore not used on this call. Se estiver usando um segredo do cliente, altere-o periodicamente.If using a client secret, please change it on a periodic basis.
grant_typegrant_type YesYes O tipo de concessão, que deve ser refresh_token para essa parte do fluxo do código de autorização.The type of grant, which must be refresh_token for this part of the authorization code flow.
refresh_tokenrefresh_token YesYes O token de atualização original que foi adquirido na segunda parte do fluxo.The original refresh token that was acquired in the second part of the flow. O offline_access escopo deve ser usado tanto na autorização quanto nas solicitações de token para receber um token de atualização.The offline_access scope must be used in both the authorization and token requests in order to receive a refresh token.
redirect_uriredirect_uri NoNo 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.
escoposcope NoNo Uma lista de escopos separados por espaços.A space-separated list of scopes. O escopo openid indica uma permissão para entrar no 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 enviar tokens para a própria API Web de back-end do seu aplicativo, que é representada pela mesma ID do aplicativo que o cliente.It can be used to send tokens to your application's own back-end web API, which is represented by the same application ID as the client. O offline_access escopo indica que seu aplicativo precisa de um token de atualização para acesso estendido aos recursos.The offline_access scope indicates that your application needs a refresh token for extended access to resources.

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. Bearer é o único tipo com suporte.Bearer is the only type that is supported.
access_tokenaccess_token O token JWT assinado que foi solicitado.The signed JWT token that was requested.
escoposcope O escopo para o qual o token é válido.The scope for which the token is valid.
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 adicionais depois que o token atual expirar.The application can use this token to acquire additional tokens after the current token expires. Os tokens de atualização podem ser usados para manter o acesso aos recursos por longos períodos de tempo.Refresh tokens can be used to retain access to resources for extended periods of time.

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 Um código que pode ser usado para classificar tipos de erros que ocorrem.A code that can be used to classify types of errors that occur.
error_descriptionerror_description Uma mensagem que pode ajudar a identificar a causa raiz de um erro de autenticação.A message that can help identify the root cause of an authentication error.

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

Quando você deseja desconectar o usuário do aplicativo, não é suficiente limpar os cookies do aplicativo ou encerrar a sessão com o usuário.When you want to sign the user out of the application, it isn't enough to clear the application's cookies or otherwise end the session with the user. Redirecione o usuário para Azure AD B2C para sair. Se você não conseguir fazer isso, o usuário poderá se autenticar novamente em seu aplicativo sem inserir suas credenciais novamente.Redirect the user to Azure AD B2C to sign out. If you fail to do so, the user might be able to reauthenticate to your application without entering their credentials again. Para obter mais informações, consulte Azure ad B2C Session.For more information, see Azure AD B2C session.

Para desconectar o usuário, redirecione o usuário para o end_session ponto de extremidade listado no documento de metadados do OpenID Connect descrito anteriormente:To sign out the user, redirect the user to the end_session endpoint that is listed in the OpenID Connect metadata document described earlier:

GET https://{tenant}.b2clogin.com/{tenant}.onmicrosoft.com/{policy}/oauth2/v2.0/logout?post_logout_redirect_uri=https%3A%2F%2Fjwt.ms%2F
ParâmetroParameter ObrigatórioRequired DescriçãoDescription
vários{tenant} YesYes Nome do seu locatário de Azure AD B2CName of your Azure AD B2C tenant
regras{policy} YesYes O fluxo de usuário que você quer usar para desconectar o usuário do aplicativo.The user flow that you want to use to sign the user out of your application.
id_token_hintid_token_hint NoNo Um token de ID emitido anteriormente para passar para o ponto de extremidade de logout como uma dica sobre a sessão autenticada atual do usuário final com o cliente.A previously issued ID token to pass to the logout endpoint as a hint about the end user's current authenticated session with the client. O id_token_hint garante que o post_logout_redirect_uri é uma URL de resposta registrada em suas configurações de Azure ad B2C aplicativo.The id_token_hint ensures that the post_logout_redirect_uri is a registered reply URL in your Azure AD B2C application settings.
client_idclient_id Não*No* A ID do aplicativo que o portal do Azure atribuído ao seu aplicativo.The application ID that the Azure portal assigned to your application.

*Isso é necessário ao usar Application a configuração de SSO de isolamento e exigir que o token de ID na solicitação de logout esteja definido como No .*This is required when using Application isolation SSO configuration and Require ID Token in logout request is set to No.
post_logout_redirect_uripost_logout_redirect_uri NoNo A URL para a qual o usuário deve ser redirecionado após a saída bem-sucedida. Se não estiver incluído, Azure AD B2C mostrará ao usuário uma mensagem genérica.The URL that the user should be redirected to after successful sign out. If it isn't included, Azure AD B2C shows the user a generic message. A menos que você forneça um id_token_hint , você não deve registrar essa URL como uma URL de resposta em suas configurações de Azure ad B2C aplicativo.Unless you provide an id_token_hint, you should not register this URL as a reply URL in your Azure AD B2C application settings.
statestate NoNo Se um parâmetro state for 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 state valores na solicitação e na resposta são idênticos.The application should verify that the state values in the request and response are identical.

Proteger seu redirecionamento de logoutSecure your logout redirect

Após o logout, o usuário é redirecionado para o URI especificado no post_logout_redirect_uri parâmetro, independentemente das URLs de resposta que foram especificadas para o aplicativo.After logout, the user is redirected to the URI specified in the post_logout_redirect_uri parameter, regardless of the reply URLs that have been specified for the application. No entanto, se um válido id_token_hint for passado, Azure ad B2C verificará se o valor de post_logout_redirect_uri corresponde a um dos URIs de redirecionamento configurados do aplicativo antes de executar o redirecionamento.However, if a valid id_token_hint is passed, Azure AD B2C verifies that the value of post_logout_redirect_uri matches one of the application's configured redirect URIs before performing the redirect. Se nenhuma URL de resposta correspondente tiver sido configurada para o aplicativo, uma mensagem de erro será exibida e o usuário não será redirecionado.If no matching reply URL was configured for the application, an error message is displayed and the user is not redirected.