Azure AD B2C: Aplicativo de página única utilizando fluxo implícito do OAuth 2.0Azure AD B2C: Single-page app sign-in by using OAuth 2.0 implicit flow

Observação

Essa funcionalidade está em visualização.This feature is in preview.

Muitos aplicativos modernos têm um aplicativo de página única front-end que é escrito principalmente em JavaScript.Many modern apps have a single-page app front end that primarily is written in JavaScript. Frequentemente, o aplicativo é escrito utilizando uma estrutura como AngularJS, Ember.js ou Durandal.Often, the app is written by using a framework like AngularJS, Ember.js, or Durandal. Os aplicativos de página única e outros aplicativos JavaScript que são executados principalmente em um navegador possuem alguns desafios adicionais para autenticação:Single-page apps and other JavaScript apps that run primarily in a browser have some additional challenges for authentication:

  • As características de segurança desses aplicativos são consideravelmente diferentes dos aplicativos Web tradicionais baseados em servidor.The security characteristics of these apps are significantly different from traditional server-based web applications.
  • Muitos servidores de autorização e provedores de identidade não dão suporte para solicitações CORS (compartilhamento de recursos entre origens).Many authorization servers and identity providers do not support cross-origin resource sharing (CORS) requests.
  • Navegador de página inteira redirecionando para longe do aplicativo pode ser significativamente invasivo para a experiência do usuário.Full-page browser redirects away from the app can be significantly invasive to the user experience.

Para oferecer suporte a esses aplicativos, o Azure AD B2C (Azure Active Directory B2C) utiliza o fluxo implícito do OAuth 2.0.To support these applications, Azure Active Directory B2C (Azure AD B2C) uses the OAuth 2.0 implicit flow. O fluxo de concessão implícita de autorização do OAuth 2.0 é descrito na seção 4.2 da especificação do OAuth 2.0.The OAuth 2.0 authorization implicit grant flow is described in section 4.2 of the OAuth 2.0 specification. No fluxo implícito, o aplicativo recebe tokens diretamente do ponto de extremidade autorizado do Azure AD (Azure Active Directory) sem qualquer troca de servidor para servidor.In implicit flow, the app receives tokens directly from the Azure Active Directory (Azure AD) authorize endpoint, without any server-to-server exchange. Toda lógica de autenticação e gerenciamento de sessão ocorre inteiramente no cliente JavaScript, sem redirecionamentos de página adicionais.All authentication logic and session handling takes place entirely in the JavaScript client, without additional page redirects.

O Azure AD B2C estende o fluxo implícito do OAuth 2.0 padrão para mais que autenticação e autorização simples.Azure AD B2C extends the standard OAuth 2.0 implicit flow to more than simple authentication and authorization. O Azure AD B2C introduz o parâmetro de política.Azure AD B2C introduces the policy parameter. Com o parâmetro de política, é possível utiliza o OAuth 2.0 para adicionar experiências do usuário ao seu aplicativo, como inscrição, conexão e gerenciamento de perfil.With the policy parameter, you can use OAuth 2.0 to add user experiences to your app, such as sign-up, sign-in, and profile management. Neste artigo, mostraremos como utilizar o fluxo implícito e o Azure AD para implementar cada uma dessas experiências em seus aplicativos de uma página única.In this article, we show you how to use the implicit flow and Azure AD to implement each of these experiences in your single-page applications. Para ajudá-lo a começar, examine os nossos exemplosNode.js e Microsoft .NET.To help you get started, take a look at our Node.js and Microsoft .NET samples.

No exemplo de solicitações HTTP neste artigo, utilizamos nosso diretório Azure AD B2C, fabrikamb2c.onmicrosoft.com. Além disso, utilizamos nosso próprio aplicativo de exemplo e políticas.In the example HTTP requests in this article, we use our sample Azure AD B2C directory, fabrikamb2c.onmicrosoft.com. We also use our own sample application and policies. É possível tentar as solicitações utilizando esses valores ou, substituí-los com seus próprios valores.You can try the requests yourself by using these values, or you can replace them with your own values. Saiba como obter seu próprio diretório Azure AD B2C, aplicativo e políticas.Learn how to get your own Azure AD B2C directory, application, and policies.

Diagrama de protocoloProtocol diagram

O fluxo de entrada implícito parece ser semelhante à seguinte figura.The implicit sign-in flow looks something like the following figure. Cada etapa é descrita detalhadamente mais adiante no artigo.Each step is described in detail later in the article.

Raias do OpenID Connect

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

Quando o aplicativo Web precisa autenticar o usuário e executar uma política, ele direciona o usuário para o ponto de extremidade /authorize.When your web app needs to authenticate the user and execute a policy, it directs the user to the /authorize endpoint. Essa é a parte interativa do fluxo, onde o usuário toma ação, dependendo da política.This is the interactive portion of the flow, where the user takes action, depending on the policy. O usuário obtém um token de identificação do ponto de extremidade do Azure AD.The user gets an ID token from the Azure AD endpoint.

Nessa solicitação, o cliente indica no parâmetro scope as permissões que ele precisa adquirir do usuário.In this request, the client indicates in the scope parameter the permissions that it needs to acquire from the user. No parâmetro p, ele indica que a política a ser executada.In the p parameter, it indicates the policy to execute. Os três exemplos a seguir (com quebras de linha para legibilidade) utilizam uma política diferente.The following three examples (with line breaks for readability) each use 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=id_token+token
&redirect_uri=https%3A%2F%2Faadb2cplayground.azurewebsites.net%2F
&response_mode=fragment
&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=id_token+token
&redirect_uri=https%3A%2F%2Faadb2cplayground.azurewebsites.net%2F
&response_mode=fragment
&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=id_token+token
&redirect_uri=https%3A%2F%2Faadb2cplayground.azurewebsites.net%2F
&response_mode=fragment
&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 atribuída ao seu aplicativo no portal do Azure.The application ID assigned to your app in the Azure portal.
response_typeresponse_type ObrigatórioRequired Deve incluir id_token para conexão do OpenID Connect.Must include id_token for OpenID Connect sign-in. É possível também incluir o tipo de resposta token.It also can include the response type token. Se utilizar token, seu aplicativo poderá receber imediatamente um token de acesso do ponto de extremidade autorizado, sem fazer uma segunda solicitação para o ponto de extremidade autorizado.If you use token, your app can immediately receive an access token from the authorize endpoint, without making a second request to the authorize endpoint. Se utilizar o tipo de resposta token, o scope parâmetro deverá conter um escopo indicando para quais recursos o token será emitido.If you use the token response type, the scope parameter must contain a scope that indicates which resource to issue the token for.
redirect_uriredirect_uri RecomendadasRecommended O URI de redirecionamento do seu aplicativo, onde as respostas de autenticação podem ser enviadas e recebidas pelo aplicativo.The redirect URI of your app, where authentication responses can be sent and received by your app. Ele deve corresponder exatamente a um dos URIs que você registrou no portal, com exceção de que ele deve ser codificado por URL.It must exactly match one of the redirect URIs that you registered in the portal, except that it must be URL-encoded.
response_moderesponse_mode RecomendadasRecommended Especifica o método que deve ser usado para enviar o token resultante de volta ao aplicativo.Specifies the method to use to send the resulting token back to your app. Para fluxos implícitos, utilize fragment.For implicit flows, use fragment.
scopescope ObrigatórioRequired Uma lista de escopos separados por espaços.A space-separated list of scopes. Um valor de escopo único indica ao Azure AD que ambas as permissões estão sendo solicitadas.A single scope value indicates to Azure AD both of the permissions that are being requested. 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. (Isso será abordado mais adiantes no artigo.) O escopo offline_access é opcional para aplicativos Web.(We'll talk about this more later in the article.) The offline_access scope is optional for web apps. Isso indica que seu aplicativo precisa de um token de atualização para acesso de longa vida para recursos.It indicates that your app needs a refresh token for long-lived access to resources.
statestate RecomendadasRecommended Um valor incluído na solicitação que também é retornado na resposta de token.A value included in the request that also is returned in the token response. Pode ser uma cadeia de caracteres de qualquer conteúdo que você deseja utilizar.It can be a string of any content that you want to use. Geralmente, um valor exclusivo gerado aleatoriamente é utilizado para evitar ataques de solicitação intersite forjada.Usually, a randomly generated, unique value is used, to prevent cross-site request forgery attacks. O estado também é utilizado para codificar informações sobre o estado do usuário no aplicativo antes da solicitação de autenticação ocorrida, como a página em que estava.The state is also used to encode information about the user's state in the app before the authentication request occurred, like the page they were on.
noncenonce ObrigatórioRequired Um valor incluído na solicitação, gerado pelo aplicativo, incluído no token de ID resultante como uma declaração.A value included in the request (generated by the app) that is 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.Usually, the value is a randomized, unique string that can be used to identify the origin of the request.
pp ObrigatórioRequired A política para executar.The policy to execute. É o nome de uma política criada no seu locatário do Azure AD B2C.It's the name of a policy that is created in your Azure AD B2C tenant. O valor do nome da política deve começar com b2c_1_.The policy name value should begin with b2c_1_. Para obter mais informações, consulte Políticas internas do Azure AD B2C.For more information, see Azure AD B2C built-in policies.
promptprompt OpcionalOptional O tipo de interação do usuário que é necessária.The type of user interaction that's required. Atualmente, o único valor válido é login.Currently, the only valid value is login. Isso força o usuário a inserir suas credenciais nessa solicitação.This 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 realize outras etapas.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. As ações do usuário dependem de como a política é definida.User actions depend on how the policy is defined.

Depois que o usuário completar a política, o Azure AD retornará uma resposta ao seu aplicativo no valor usado para redirect_uri.After the user completes the policy, Azure AD returns a response to your app at the value you used for redirect_uri. Ele usa o método especificado no parâmetro response_mode.It uses the method specified in the response_mode parameter. A resposta é exatamente a mesma para cada um dos cenários de ação do usuário, independentemente de qual política foi executada.The response is exactly the same for each of the user action scenarios, independent of the policy that was executed.

Resposta bem-sucedidaSuccessful response

Uma resposta bem sucedida que utiliza response_mode=fragment e response_type=id_token+token é semelhante à seguinte, com quebras de linha para legibilidade:A successful response that uses response_mode=fragment and response_type=id_token+token looks like the following, with line breaks for legibility:

GET https://aadb2cplayground.azurewebsites.net/#
access_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...
&token_type=Bearer
&expires_in=3599
&scope="90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6 offline_access",
&id_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...
&state=arbitrary_data_you_sent_earlier
ParâmetroParameter DescriçãoDescription
access_tokenaccess_token O token de acesso que o aplicativo solicitou.The access token that the app requested. O token de acesso não deve ser decodificado nem inspecionado de outra forma.The access token should not be decoded or otherwise inspected. É possível tratá-lo como uma cadeia de caracteres opaca.It can be treated as an opaque string.
token_typetoken_type O valor do tipo de token.The token type value. O único tipo com suporte do Azure AD é PortadorThe only type that Azure AD supports is Bearer.
expires_inexpires_in O período de tempo que o token de acesso é válido (em segundos).The length of time that the access token is valid (in seconds).
scopescope Os escopos para os quais o token é válido.The scopes that the token is valid for. Além disso, também é possível utilizar escopos para tokens de cache para uso posterior.You also can use scopes to cache tokens for later use.
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. Para obter mais informações sobre tokens de identificação e seus conteúdos, consulte a referência de token do Azure AD B2C.For more information about ID tokens and their contents, see the Azure AD B2C token reference.
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 resposta são idênticos.The app should verify that the state values in the request and response are identical.

Resposta de erroError response

As respostas de erro também podem ser enviadas para URI de redirecionamento, de modo que o aplicativo possa tratá-los adequadamente:Error responses also can be sent to the redirect URI 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ódigo de erro usada para classificar os tipos de erros que ocorrem.An error code string used to classify types of errors that occur. O código de erro também pode ser utilizado para tratamento de erro.You also can use the error code for error handling.
error_descriptionerror_description Uma mensagem de erro específica que pode ajudar você a identificar a causa raiz de um erro de autenticação.A specific error message that can help you identify the root cause of an authentication error.
statestate Consulte a descrição completa na tabela anterior.See the full description in the preceding table. 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

Receber um token de ID não é suficiente para autenticar o usuário.Receiving an ID token is not enough to authenticate the user. Você deverá validar a assinatura do token de ID e verificar as reivindicações no token pelos requisitos de 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.

Muitas bibliotecas de software livre estão disponíveis para validar JWTs, dependendo do idioma de sua preferência.Many open-source libraries are available for validating JWTs, depending on the language you prefer to use. Considere explorar bibliotecas de software livre disponíveis em vez de implementar sua própria lógica de validação.Consider exploring available open-source libraries rather than implementing your own validation logic. As informações contidas neste artigo podem ser utilizadas para ajudá-lo a aprender como utilizar essas bibliotecas corretamente.You can use the information in this article to help you learn how to properly use those libraries.

O Azure AD B2C tem um ponto de extremidade de metadados OpenID Connect.Azure AD B2C has an OpenID Connect metadata endpoint. Um aplicativo pode usar o ponto de extremidade para buscar informações sobre o Azure AD B2C em tempo de execução.An app can use the endpoint 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 locatário do Azure AD B2C.There is a JSON metadata document for each policy in your Azure AD B2C tenant. Por exemplo, o documento de metadados para a política b2c_1_sign_in no locatário fabrikamb2c.onmicrosoft.com está localizado em:For example, the metadata document for the b2c_1_sign_in policy in the fabrikamb2c.onmicrosoft.com tenant is located at:

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

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

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

Para determinar qual política foi utilizada para assinar um token de ID (e onde buscar os metadados), há duas opções.To determine which policy was used to sign an ID token (and where to fetch the metadata from), you have two options. Primeiro, o nome da política está incluído na declaração acr em id_token.First, the policy name is included in the acr claim in 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 about how to parse the claims from an ID token, see the Azure AD B2C token reference. Sua outra opção é codificar a política no valor do parâmetro state quando emitir a solicitação.Your other option is to encode the policy in the value of the state parameter when you issue the request. Em seguida, decodifique o parâmetro state para determinar qual política foi utilizada.Then, decode the state parameter to determine which policy was used. Ambos os métodos são válidos.Either method is valid.

Após ter adquirido o documento de metadados a partir do ponto de extremidade de metadados OpenID Connect, você poderá utilizar 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 (located at this endpoint) to validate the signature of the ID token. Poderá haver várias chaves listadas nesse ponto de extremidade em qualquer momento, cada uma identificada por um kid.There might be multiple keys listed at this endpoint at any given time, each identified by a kid. O cabeçalho de id_token também contém uma declaração kid.The header of id_token also contains a kid claim. Ele indica qual dessas chaves foi utilizada para assinar o token de ID.It indicates which of these keys was used to sign the ID token. Para obter mais informações, incluindo aprender sobre tokens de validação, consulte a referência de token do Azure AD B2C.For more information, including learning about validating tokens, see the Azure AD B2C token reference.

Após validar a assinatura do token de ID, várias declarações exigirão verificação.After you validate the signature of the ID token, several claims require verification. Por exemplo:For example:

  • 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 aud 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 app. Seu valor deve ser a ID do aplicativo do seu aplicativo.Its value should be the application ID of your app.
  • Valide as declarações iat e exp para garantir que o token de ID não expirou.Validate the iat and exp claims to ensure that the ID token has not expired.

Várias outras validações que deverão ser executadas estão descritas detalhadamente em Especificação de OpenID Connect Core. Talvez você também queira validar declarações adicionais, dependendo do cenário.Several more validations that you should perform 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:

  • Garanta que o usuário ou a organização tenha se inscrito no aplicativo.Ensuring that the user or organization has signed up for the app.
  • Garanta que o usuário tenha autorização e privilégios adequados.Ensuring that the user has proper authorization and privileges.
  • Garanta que uma determina força de autenticação tenha ocorrido como, por exemplo, utilizando a autenticação multifator do Azure.Ensuring that a certain strength of authentication has occurred, such as by using Azure Multi-Factor Authentication.

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

Após validar completamente o token de ID, você poderá iniciar uma sessão com o usuário.After you have completely validated the ID token, you can begin a session with the user. No seu aplicativo, use as declarações no token de ID para obter informações sobre o usuário.In your app, use the claims in the ID token to obtain information about the user. Essas informações podem ser usadas para exibição, registros, autorizações e outros.This information can be used for display, records, authorization, and so on.

Obter tokens de acessoGet access tokens

Se os seus aplicativos Web precisam somente executar políticas, você poderá ignorar as próximas seções.If the only thing your web apps needs to do is execute policies, you can skip the next few sections. As informações contidas nas seções a seguir são aplicáveis apenas para aplicativos Web que precisam fazer chamadas autenticadas para uma API Web e que são protegidas pelo Azure AD B2C.The information in the following sections are applicable only to web apps that need to make authenticated calls to a web API, and which are protected by Azure AD B2C.

Agora que você autenticou o usuário no seu aplicativo de página única, você pode obter tokens de acesso para chamar APIs Web que são protegidas pelo Azure AD.Now that you've signed the user in to your single-page app, you can get access tokens for calling web APIs that are secured by Azure AD. Mesmo que já tenha recebido um token utilizando o tipo de resposta token, você poderá utilizar esse método para adquirir tokens para recursos adicionais sem redirecionar o usuário para conectar novamente.Even if you have already received a token by using the token response type, you can use this method to acquire tokens for additional resources without redirecting the user to sign in again.

Em um fluxo típico de aplicativo Web, você faria isso fazendo uma solicitação para o ponto de extremidade /token.In a typical web app flow, you would do this by making a request to the /token endpoint. No entanto, o ponto de extremidade não dá suporte para solicitações CORS, portanto, fazer chamadas AJAX para obter e atualizar tokens não é uma opção.However, the endpoint does not support CORS requests, so making AJAX calls to get and refresh tokens is not an option. Em vez disso, você poderá utiliza o fluxo implícito em um elemento iframe HTML oculto para obter novos tokens para outras APIs Web.Instead, you can use the implicit flow in a hidden HTML iframe element to get new tokens for other web APIs. A seguir está um exemplo, com quebras de linha para legibilidade:Here's an example, with line breaks for legibility:


https://login.microsoftonline.com/fabrikamb2c.onmicrosoft.com/oauth2/v2.0/authorize?
client_id=90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6
&response_type=token
&redirect_uri=https%3A%2F%2Faadb2cplayground.azurewebsites.net%2F
&scope=https%3A%2F%2Fapi.contoso.com%2Ftasks.read
&response_mode=fragment
&state=arbitrary_data_you_can_receive_in_the_response
&nonce=12345
&prompt=none
&domain_hint=organizations
&login_hint=myuser@mycompany.com
&p=b2c_1_sign_in
ParâmetroParameter Obrigatório?Required? DescriçãoDescription
client_idclient_id ObrigatórioRequired A ID do aplicativo atribuída ao seu aplicativo no portal do Azure.The application ID assigned to your app in the Azure portal.
response_typeresponse_type ObrigatórioRequired Deve incluir id_token para conexão do OpenID Connect.Must include id_token for OpenID Connect sign-in. Também é possível incluir o tipo de resposta token.It might also include the response type token. Se utilizar token aqui, seu aplicativo poderá receber imediatamente um token de acesso do ponto de extremidade autorizado, sem fazer uma segunda solicitação para o ponto de extremidade autorizado.If you use token here, your app can immediately receive an access token from the authorize endpoint, without making a second request to the authorize endpoint. Se utilizar o tipo de resposta token, o scope parâmetro deverá conter um escopo indicando para quais recursos o token será emitido.If you use the token response type, the scope parameter must contain a scope that indicates which resource to issue the token for.
redirect_uriredirect_uri RecomendadasRecommended O URI de redirecionamento do seu aplicativo, onde as respostas de autenticação podem ser enviadas e recebidas pelo aplicativo.The redirect URI of your app, where authentication responses can be sent and received by your app. Ele deve coincidir exatamente com um dos URIs de redirecionamento registrados no portal, exceto que deve ser codificado em URL.It must exactly match one of the redirect URIs 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. Para obter tokens, inclua todos os escopos que necessários para o recurso pretendido.For getting tokens, include all scopes that you require for the intended resource.
response_moderesponse_mode RecomendadasRecommended Especifica o método que deve ser usado para enviar o token resultante de volta ao aplicativo.Specifies the method that is used to send the resulting token back to your app. Pode ser query, form_post ou fragment.Can be query, form_post, or fragment.
statestate RecomendadasRecommended Um valor incluído na solicitação que retorna na resposta do token.A value included in the request that is returned in the token response. Pode ser uma cadeia de caracteres de qualquer conteúdo que você deseja utilizar.It can be a string of any content that you want to use. Geralmente, um valor exclusivo gerado aleatoriamente é utilizado para evitar ataques de solicitação intersite forjada.Usually, a randomly generated, unique value is used, to prevent cross-site request forgery attacks. O estado também é utilizado para codificar informações sobre o estado do usuário no aplicativo, antes que a solicitação de autenticação tenha ocorrido.The state also is used to encode information about the user's state in the app before the authentication request occurred. Por exemplo, a página ou a exibição do usuário estava ativada.For example, the page or view the user was on.
noncenonce ObrigatórioRequired Um valor incluído na solicitação, gerado pelo aplicativo, que está incluído no token de ID resultante como uma reivindicação.A value included in the request, generated by the app, that is 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 identifica a origem da solicitação.Usually, the value is a randomized, unique string that identifies the origin of the request.
promptprompt ObrigatórioRequired Para atualizar e obter tokens em um iframe oculto, utilize prompt=none para garantir que o iframe não fique preso na página de entrada e retorna imediatamente.To refresh and get tokens in a hidden iframe, use prompt=none to ensure that the iframe does not get stuck on the sign-in page, and returns immediately.
login_hintlogin_hint ObrigatórioRequired Para atualizar e obter tokens em um iframe oculto, inclua o nome de usuário de usuário nesta dica para distinguir entre várias sessões que o usuário pode ter em um determinado momento.To refresh and get tokens in a hidden iframe, include the username of the user in this hint to distinguish between multiple sessions the user might have at a given time. Você pode extrair o nome de usuário de um início de sessão anterior usando a declaração preferred_username.You can extract the username from an earlier sign-in by using the preferred_username claim.
domain_hintdomain_hint ObrigatórioRequired Pode ser consumers ou organizations.Can be consumers or organizations. Para atualizar e obter tokens em um iframe oculto, é necessário incluir o valor domain_hint na solicitação.For refreshing and getting tokens in a hidden iframe, you must include the domain_hint value in the request. Extraia a declaração tid do token de ID de uma entrada anterior para determinar qual valor usar.Extract the tid claim from the ID token of an earlier sign-in to determine which value to use. Se o valor da declaração tid for 9188040d-6c67-4c5b-b112-36a304b66dad, utilize domain_hint=consumers.If the tid claim value is 9188040d-6c67-4c5b-b112-36a304b66dad, use domain_hint=consumers. Caso contrário, use domain_hint=organizations.Otherwise, use domain_hint=organizations.

Ao configurar o parâmetro prompt=none, essa solicitação terá êxito ou falhará imediatamente e retornará ao seu aplicativo.By setting the prompt=none parameter, this request either succeeds or fails immediately, and returns to your application. Uma resposta bem-sucedida será enviada para seu aplicativo no URI de redirecionamento indicado, utilizando o método especificado no parâmetro response_mode.A successful response is sent to your app at the indicated redirect URI, by using the method specified in the response_mode parameter.

Resposta bem-sucedidaSuccessful response

Uma resposta bem-sucedida utilizando response_mode=fragment é semelhante à seguinte:A successful response by using response_mode=fragment looks like this:

GET https://aadb2cplayground.azurewebsites.net/#
access_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...
&state=arbitrary_data_you_sent_earlier
&token_type=Bearer
&expires_in=3599
&scope=https%3A%2F%2Fapi.contoso.com%2Ftasks.read
ParâmetroParameter DescriçãoDescription
access_tokenaccess_token O token solicitado pelo aplicativo.The token that the app requested.
token_typetoken_type O tipo de token sempre será Portador.The token type will always be Bearer.
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 resposta são idênticos.The app should verify that the state values in the request and response are identical.
expires_inexpires_in Por quanto tempo o token de acesso é válido (em segundos).How long the access token is valid (in seconds).
scopescope Os escopos para os quais o access_token é válido.The scopes that the access token is valid for.

Resposta de erroError response

As respostas de erro também podem ser enviadas para URI de redirecionamento, de modo que o aplicativo possa tratá-los adequadamente.Error responses also can be sent to the redirect URI so that the app can handle them appropriately. Para prompt=none, um erro esperado é semelhante ao seguinte:For prompt=none, an expected error looks like this:

GET https://aadb2cplayground.azurewebsites.net/#
error=user_authentication_required
&error_description=the+request+could+not+be+completed+silently
ParâmetroParameter DescriçãoDescription
errorerror Uma cadeia de caracteres de código de erro que pode ser utilizada para classificar os tipos de erros que ocorrem.An error code string that can be used to classify types of errors that occur. A cadeia de caracteres também pode ser utilizada para reagir a erros.You also can use the string to react to errors.
error_descriptionerror_description Uma mensagem de erro específica que pode ajudar você a identificar a causa raiz de um erro de autenticação.A specific error message that can help you identify the root cause of an authentication error.

Se você receber esse erro na solicitação do iframe, o usuário deverá entrar novamente de forma interativa para recuperar um novo token.If you receive this error in the iframe request, the user must interactively sign in again to retrieve a new token. Você pode fazer isso de maneira que faça sentido para seu aplicativo.You can handle this in a way that makes sense for your application.

Tokens de atualizaçãoRefresh tokens

Os tokens de ID e tokens de acesso expiram após um curto período de tempo.ID tokens and access tokens both expire after a short period of time. Seu aplicativo deverá estar preparado para atualizar esses tokens periodicamente.Your app must be prepared to refresh these tokens periodically. Para atualizar qualquer tipo de token, execute a mesma solicitação de iframe oculto utilizada no exemplo anterior, utilizando o parâmetro prompt=none para controlar as etapas do AD Azure.To refresh either type of token, perform the same hidden iframe request we used in an earlier example, by using the prompt=none parameter to control Azure AD steps. Para receber um novo valor id_token, certifique-se de usar response_type=id_token e scope=openid e um parâmetro nonce.To receive a new id_token value, be sure to use response_type=id_token and scope=openid, and a nonce parameter.

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

Quando você quiser desconectar o usuário do aplicativo, redirecione o usuário ao Azure AD para sair. Se não fizer isso, o usuário poderá reautenticar no seu aplicativo sem entrar novamente nas credenciais.When you want to sign the user out of the app, redirect the user to Azure AD to sign out. If you don't do this, 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 end_session_endpoint que está listado no mesmo documento de metadados do OpenID Connect descrito em Validar o ID de token.You can simply redirect the user to the end_session_endpoint that is listed in the same OpenID Connect metadata document described in Validate the ID token. Por exemplo:For example:

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 usada para desconectar o usuário de seu aplicativo.The policy 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 estiver incluído, o Azure AD B2C exibirá uma mensagem genérica para o usuário.The URL that the user should be redirected to after successful sign-out. If it is not included, Azure AD B2C displays a generic message to the user.

Observação

Direcionar o usuário para end_session_endpoint limpa alguns dos estados de logon único do usuário com o Azure AD B2C.Directing the user to the end_session_endpoint clears some of the user's single sign-on state with Azure AD B2C. No entanto, ele não desconecta o usuário da sessão do provedor de identidade social do usuário.However, it doesn't sign the user out of the user's social identity provider session. Se o usuário selecionar o mesmo provedor de identificação durante um conexão subsequente, o usuário será reautenticado, sem entrar em suas credenciais.If the user selects the same identify provider during a subsequent sign-in, the user is reauthenticated, without entering their credentials. Se um usuário quiser sair do serviço de seu aplicativo do Azure AD B2C, isso não significa necessariamente que ele deseja se desconectar completamente de sua conta do Facebook, por exemplo.If a user wants to sign out of your Azure AD B2C application, it does not necessarily mean they want to completely sign out of their Facebook account, for example. No entanto, para contas locais, a sessão do usuário será encerrada corretamente.However, for local accounts, the user's session will be ended properly.

Utilize seu próprio locatário do Azure AD B2CUse your own Azure AD B2C tenant

Para tentar essas solicitações, complete as três etapas a seguir.To try these requests yourself, complete the following three steps. Substitua os valores de exemplo que utilizamos neste artigo com seus próprios valores:Replace the example values we use in this article with your own values:

  1. Criar um locatário do Azure AD B2C.Create an Azure AD B2C tenant. Utilize o nome do seu locatário nas solicitações.Use the name of your tenant in the requests.
  2. Criar um aplicativo para obter um ID de aplicativo e um valor redirect_uri.Create an application to obtain an application ID and a redirect_uri value. Inclua um aplicativo Web ou uma API Web em seu aplicativo.Include a web app or web API in your app. Opcionalmente, é possível criar um segredo de aplicativo.Optionally, you can create an application secret.
  3. Criar suas regras para obter os nomes de política.Create your policies to obtain your policy names.

ExemplosSamples