Autorizar o acesso aos aplicativos Web usando o OpenID Connect e o Azure Active DirectoryAuthorize access to web applications using OpenID Connect and Azure Active Directory

Aviso

Este conteúdo é destinado ao ponto de extremidade mais antigo do Azure AD v1.0.This content is for the older Azure AD v1.0 endpoint. Use a plataforma de identidade da Microsoft para obter novos projetos.Use the Microsoft identity platform for new projects.

OpenID Connect é uma camada de identidade simples criada sobre o protocolo OAuth 2.0.OpenID Connect is a simple identity layer built on top of the OAuth 2.0 protocol. OAuth 2.0 define os mecanismos para obter e usar tokens de acesso para acessar recursos protegidos, mas eles não definem os métodos padrão para fornecer informações de identidade.OAuth 2.0 defines mechanisms to obtain and use access tokens to access protected resources, but they do not define standard methods to provide identity information. O OpenID Connect implementa a autenticação como uma extensão para o processo de autorização do OAuth 2.0.OpenID Connect implements authentication as an extension to the OAuth 2.0 authorization process. Ele fornece informações sobre o usuário final na forma de um id_token que verifica a identidade do usuário e fornece informações básicas de perfil sobre o usuário.It provides information about the end user in the form of an id_token that verifies the identity of the user and provides basic profile information about the user.

O OpenID Connect é a nossa recomendação se você estiver criando um aplicativo Web hospedado em um servidor e acessado por meio de um navegador.OpenID Connect is our recommendation if you are building a web application that is hosted on a server and accessed via a browser.

Registrar seu aplicativo no seu locatário do ADRegister your application with your AD tenant

Primeiro, Registre seu aplicativo com seu locatário do Azure Active Directory (Azure AD).First, register your application with your Azure Active Directory (Azure AD) tenant. Isso dará a você uma ID do Aplicativo para seu aplicativo e permitirá que ele receba tokens.This will give you an Application ID for your application, as well as enable it to receive tokens.

  1. Entre no portal do Azure.Sign in to the Azure portal.

  2. Escolha seu locatário do Azure AD selecionando sua conta no canto superior direito da página, seguido selecionando a navegação do diretório switch e, em seguida, selecionando o locatário apropriado.Choose your Azure AD tenant by selecting your account in the top right corner of the page, followed by selecting the Switch Directory navigation and then selecting the appropriate tenant.

    • Ignore esta etapa se você tiver apenas um locatário do Azure AD em sua conta ou se você já tiver selecionado o locatário do Azure AD apropriado.Skip this step if you only have one Azure AD tenant under your account, or if you've already selected the appropriate Azure AD tenant.
  3. Na portal do Azure, procure e selecione Azure Active Directory.In the Azure portal, search for and select Azure Active Directory.

  4. No menu Azure Active Directory à esquerda, selecione registros do aplicativoe, em seguida, selecione novo registro.In the Azure Active Directory left menu, select App Registrations, and then select New registration.

  5. Siga os prompts e crie um novo aplicativo.Follow the prompts and create a new application. Não importa se é um aplicativo Web ou um cliente público (Mobile & Desktop) para este tutorial, mas se você quiser exemplos específicos para aplicativos Web ou aplicativos cliente públicos, Confira nossos guias de início rápido.It doesn't matter if it is a web application or a public client (mobile & desktop) application for this tutorial, but if you'd like specific examples for web applications or public client applications, check out our quickstarts.

    • Nome é o nome do aplicativo e descreve o seu aplicativo aos usuários finais.Name is the application name and describes your application to end users.
    • Em Tipos de conta com suporte, selecione Contas em qualquer diretório organizacional e contas pessoais da Microsoft.Under Supported account types, select Accounts in any organizational directory and personal Microsoft accounts.
    • Forneça o URI de redirecionamento.Provide the Redirect URI. Para aplicativos Web, essa é a URL base do seu aplicativo onde os usuários podem entrar.For web applications, this is the base URL of your app where users can sign in. Por exemplo, http://localhost:12345.For example, http://localhost:12345. Para o cliente público (Mobile & Desktop), o AD do Azure o usa para retornar respostas de token.For public client (mobile & desktop), Azure AD uses it to return token responses. Insira um valor específico para seu aplicativo.Enter a value specific to your application. Por exemplo, http://MyFirstAADApp.For example, http://MyFirstAADApp.
  6. Depois de concluir o registro, o Azure AD atribuirá ao seu aplicativo um identificador de cliente exclusivo (a ID do aplicativo).Once you've completed registration, Azure AD will assign your application a unique client identifier (the Application ID). Você precisará desse valor nas próximas seções, então copie-o da página do aplicativo.You need this value in the next sections, so copy it from the application page.

  7. Para localizar seu aplicativo no portal do Azure, selecione registros de aplicativoe, em seguida, selecione Exibir todos os aplicativos.To find your application in the Azure portal, select App registrations, and then select View all applications.

Fluxo de autenticação usando o OpenID ConnectAuthentication flow using OpenID Connect

O fluxo de credenciais mais básico contém as seguintes etapas: cada um delas é descrita em detalhes abaixo.The most basic sign-in flow contains the following steps - each of them is described in detail below.

Fluxo de autenticação usando o OpenId Connect

Documento de metadados do OpenID ConnectOpenID Connect metadata document

O OpenID Connect descreve um documento de metadados que contém a maioria das informações necessárias para que um aplicativo inicie uma sessão.OpenID Connect describes a metadata document that contains most of the information required for an app to perform sign-in. Isso inclui informações como as URLs a serem usadas e o local das chaves de assinatura públicas do serviço.This includes information such as the URLs to use and the location of the service's public signing keys. O documento de metadados do OpenID Connect pode ser localizado em:The OpenID Connect metadata document can be found at:

https://login.microsoftonline.com/{tenant}/.well-known/openid-configuration

Os metadados são um documento JSON (JavaScript Object Notation) simples.The metadata is a simple JavaScript Object Notation (JSON) document. Veja o snippet a seguir para obter um exemplo.See the following snippet for an example. O conteúdo do snippet é totalmente descrito na especificação do OpenID Connect.The snippet's contents are fully described in the OpenID Connect specification. Observe que fornecer uma ID de locatário em vez de common {Tenant} acima resultará em URIs específicos de locatário no objeto JSON retornado.Note that providing a tenant ID rather than common in place of {tenant} above will result in tenant-specific URIs in the JSON object returned.

{
    "authorization_endpoint": "https://login.microsoftonline.com/{tenant}/oauth2/authorize",
    "token_endpoint": "https://login.microsoftonline.com/{tenant}/oauth2/token",
    "token_endpoint_auth_methods_supported":
    [
        "client_secret_post",
        "private_key_jwt",
        "client_secret_basic"
    ],
    "jwks_uri": "https://login.microsoftonline.com/common/discovery/keys"
    "userinfo_endpoint":"https://login.microsoftonline.com/{tenant}/openid/userinfo",
    ...
}

Se seu aplicativo tiver chaves de assinatura personalizadas como resultado do uso do recurso claims-mapping, será necessário acrescentar um appidparâmetro de consulta contendo a ID do aplicativo para obter um jwks_uri apontando para as informações de chave de assinatura do aplicativo.If your app has custom signing keys as a result of using the claims-mapping feature, you must append an appid query parameter containing the app ID in order to get a jwks_uri pointing to your app's signing key information. Por exemplo: https://login.microsoftonline.com/{tenant}/.well-known/openid-configuration?appid=6731de76-14a6-49ae-97bc-6eba6914391e contém uma jwks_uri de https://login.microsoftonline.com/{tenant}/discovery/keys?appid=6731de76-14a6-49ae-97bc-6eba6914391e.For example: https://login.microsoftonline.com/{tenant}/.well-known/openid-configuration?appid=6731de76-14a6-49ae-97bc-6eba6914391e contains a jwks_uri of https://login.microsoftonline.com/{tenant}/discovery/keys?appid=6731de76-14a6-49ae-97bc-6eba6914391e.

Enviar a solicitação de conexãoSend the sign-in request

Quando o aplicativo Web precisa autenticar o usuário, ele deve direcionar o usuário para o ponto de extremidade /authorize .When your web application needs to authenticate the user, it must direct the user to the /authorize endpoint. Essa solicitação é semelhante ao primeiro segmento do Fluxo de código de autorização do OAuth 2.0, com algumas diferenças importantes:This request is similar to the first leg of the OAuth 2.0 Authorization Code Flow, with a few important distinctions:

  • A solicitação deve incluir o escopo openid no parâmetro scope.The request must include the scope openid in the scope parameter.
  • O parâmetro response_type deve incluir id_token.The response_type parameter must include id_token.
  • A solicitação deve incluir o parâmetro nonce .The request must include the nonce parameter.

Dessa forma, uma solicitação de exemplo teria esta aparência:So a sample request would look like this:

// Line breaks for legibility only

GET https://login.microsoftonline.com/{tenant}/oauth2/authorize?
client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&response_type=id_token
&redirect_uri=http%3A%2F%2Flocalhost%3a12345
&response_mode=form_post
&scope=openid
&state=12345
&nonce=7362CAEA-9CA5-4B43-9BA3-34D7C303EBA7
ParâmetroParameter TypeType DescriçãoDescription
locatáriotenant obrigatóriorequired O valor {tenant} no caminho da solicitação pode ser usado para controlar quem pode entrar no aplicativo.The {tenant} value in the path of the request can be used to control who can sign into the application. Os valores permitidos são identificadores de locatário, por exemplo, 8eaef023-2b34-4da1-9baa-8bc8c9d6a490 ou contoso.onmicrosoft.com ou common para tokens independentes de locatárioThe allowed values are tenant identifiers, for example, 8eaef023-2b34-4da1-9baa-8bc8c9d6a490 or contoso.onmicrosoft.com or common for tenant-independent tokens
client_idclient_id necessáriasrequired A ID do Aplicativo atribuída para o aplicativo ao registrá-lo no Azure Active Directory.The Application ID assigned to your app when you registered it with Azure AD. Você pode encontrar isso no Portal do Azure.You can find this in the Azure portal. Clique em Azure Active Directory, clique em registros do aplicativo, escolha o aplicativo e localize a ID do aplicativo na página do aplicativo.Click Azure Active Directory, click App Registrations, choose the application and locate the Application ID on the application page.
response_typeresponse_type necessáriasrequired Deve incluir id_token para conexão do OpenID Connect.Must include id_token for OpenID Connect sign-in. Também pode incluir outros response_types, como code ou token.It may also include other response_types, such as code or token.
escoposcope recomendávelrecommended A especificação do OpenID Connect requer o escopo openid , que se traduz na permissão "entrar" na interface do usuário de consentimento.The OpenID Connect specification requires the scope openid, which translates to the "Sign you in" permission in the consent UI. Esse e outros escopos OIDC são ignorados no ponto de extremidade v 1.0, mas ainda é uma prática recomendada para clientes em conformidade com os padrões.This and other OIDC scopes are ignored on the v1.0 endpoint, but is still a best practice for standards-compliant clients.
noncenonce necessáriasrequired Um valor incluído na solicitação, gerado pelo aplicativo, que é incluído no id_token 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, então, verificar esse valor para atenuar 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 ou um GUID que pode ser usado para identificar a origem da solicitação.The value is typically a randomized, unique string or GUID that can be used to identify the origin of the request.
redirect_uriredirect_uri recomendávelrecommended O redirect_uri 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 redirect_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 you registered in the portal, except it must be url encoded. Se estiver ausente, o agente do usuário será enviado de volta para um dos URIs de redirecionamento registrados para o aplicativo, aleatoriamente.If missing, the user agent will be sent back to one of the redirect URIs registered for the app, at random. O comprimento máximo é de 255 bytesThe maximum length is 255 bytes
response_moderesponse_mode opcionaisoptional Especifica o método que deve ser usado para enviar o authorization_code resultante de volta ao aplicativo.Specifies the method that should be used to send the resulting authorization_code back to your app. Os valores suportados são form_post para * post do formulário HTTP * e fragment para o * fragmento de URL *.Supported values are form_post for HTTP form post and fragment for URL fragment. Em aplicativos Web, é recomendável usar response_mode=form_post a fim de garantir a transferência mais segura de tokens para seu aplicativo.For web applications, we recommend using response_mode=form_post to ensure the most secure transfer of tokens to your application. O padrão para qualquer fluxo, incluindo um id_token é fragment.The default for any flow including an id_token is fragment.
statestate recomendávelrecommended 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 desejado.It can be a string of any content that you wish. Um valor exclusivo gerado aleatoriamente 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 ou a exibição 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 or view they were on.
promptprompt opcionaisoptional Indica o tipo de interação do usuário que é necessário.Indicates the type of user interaction that is required. Atualmente, os únicos valores válidos são "login", "none" e "consent".Currently, the only valid values are 'login', 'none', and 'consent'. prompt=login força o usuário a inserir suas credenciais na solicitação, negando o logon único.prompt=login forces the user to enter their credentials on that request, negating single-sign on. prompt=none é o oposto — ele garante que nenhum prompt interativo seja apresentado ao usuário.prompt=none is the opposite - it ensures that the user is not presented with any interactive prompt whatsoever. Se a solicitação não puder ser concluída silenciosamente por meio de logon único, o ponto de extremidade retornará um erro.If the request cannot be completed silently via single-sign on, the endpoint returns an error. prompt=consent dispara a caixa de diálogo de consentimento do OAuth depois que o usuário se conecta, solicitando que ele conceda permissões ao aplicativo.prompt=consent triggers the OAuth consent dialog after the user signs in, asking the user to grant permissions to the app.
login_hintlogin_hint opcionaisoptional Pode ser usado para preencher previamente o campo de nome de usuário/endereço de email da página de entrada do usuário, caso você saiba o nome de usuário com antecedência.Can be used to pre-fill the username/email address field of the sign-in page for the user, if you know their username ahead of time. Geralmente, os aplicativos usam esse parâmetro durante a reautenticação, após já terem extraído o nome de usuário de uma entrada anterior usando a declaração preferred_username.Often apps use this parameter during reauthentication, having already extracted the username from a previous sign-in using the preferred_username claim.

Nesse ponto, é solicitado que o usuário insira suas credenciais e conclua a autenticação.At this point, the user is asked to enter their credentials and complete the authentication.

Resposta de exemploSample response

Uma resposta de exemplo, enviada para o redirect_uri especificado na solicitação de entrada após a autenticação do usuário, poderia ter esta aparência:A sample response, sent to the redirect_uri specified in the sign-in request after the user has authenticated, could look like this:

POST / HTTP/1.1
Host: localhost:12345
Content-Type: application/x-www-form-urlencoded

id_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik1uQ19WWmNB...&state=12345
ParâmetroParameter DescriçãoDescription
id_tokenid_token O id_token que o aplicativo solicitou.The id_token that the app requested. Você pode usar o id_token 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.
statestate 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. Um valor exclusivo gerado aleatoriamente 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 ou a exibição 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 or view they were on.

Resposta de erroError response

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

POST / HTTP/1.1
Host: localhost:12345
Content-Type: application/x-www-form-urlencoded

error=access_denied&error_description=the+user+canceled+the+authentication
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 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.

Códigos de erro para erros de ponto de extremidade de autorizaçãoError codes for authorization endpoint errors

A tabela a seguir descreve os vários códigos de erro que podem ser retornados no parâmetro error da resposta de erro.The following table describes the various error codes that can be returned in the error parameter of the error response.

Código do ErroError Code DescriçãoDescription Ação do ClienteClient Action
invalid_requestinvalid_request Erro de protocolo, como um parâmetro obrigatório ausente.Protocol error, such as a missing required parameter. Corrija e reenvie a solicitação.Fix and resubmit the request. Esse é um erro de desenvolvimento que, normalmente, é capturado durante os testes iniciais.This is a development error, and is typically caught during initial testing.
unauthorized_clientunauthorized_client O aplicativo cliente não tem permissão para solicitar um código de autorização.The client application is not permitted to request an authorization code. Isso geralmente ocorre quando o aplicativo cliente não está registrado no Azure AD ou não é adicionado ao locatário do Azure AD do usuário.This usually occurs when the client application is not registered in Azure AD or is not added to the user's Azure AD tenant. O aplicativo pode solicitar que o usuário instale o aplicativo e o adicione ao Azure AD.The application can prompt the user with instruction for installing the application and adding it to Azure AD.
access_deniedaccess_denied Consentimento negado pelo proprietário do recursoResource owner denied consent O aplicativo cliente pode notificar o usuário de que não pode continuar, a menos que o usuário consinta.The client application can notify the user that it cannot proceed unless the user consents.
unsupported_response_typeunsupported_response_type O servidor de autorização não dá suporta ao tipo de resposta na solicitação.The authorization server does not support the response type in the request. Corrija e reenvie a solicitação.Fix and resubmit the request. Esse é um erro de desenvolvimento que, normalmente, é capturado durante os testes iniciais.This is a development error, and is typically caught during initial testing.
server_errorserver_error O servidor encontrou um erro inesperado.The server encountered an unexpected error. Tente novamente a solicitação.Retry the request. Esses erros podem resultar de condições temporárias.These errors can result from temporary conditions. O aplicativo cliente pode explicar ao usuário que sua resposta está atrasada devido a um erro temporário.The client application might explain to the user that its response is delayed due to a temporary error.
temporarily_unavailabletemporarily_unavailable O servidor está temporariamente muito ocupado para tratar da solicitação.The server is temporarily too busy to handle the request. Tente novamente a solicitação.Retry the request. O aplicativo cliente pode explicar para o usuário que sua resposta está atrasada devido a uma condição temporária.The client application might explain to the user that its response is delayed due to a temporary condition.
invalid_resourceinvalid_resource O recurso de destino é inválido porque não existe, o Azure AD não consegue encontrá-lo ou ele não está configurado corretamente.The target resource is invalid because it does not exist, Azure AD cannot find it, or it is not correctly configured. Isso indica que o recurso, se ele existe, não foi configurado no locatário.This indicates the resource, if it exists, has not been configured in the tenant. O aplicativo pode solicitar que o usuário instale o aplicativo e o adicione ao Azure AD.The application can prompt the user with instruction for installing the application and adding it to Azure AD.

Validar o id_tokenValidate the id_token

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

Você pode escolher validar o id_token no código do cliente, mas uma prática comum é enviar o id_token para um servidor de back-end e executar a validação nele.You can choose to validate the id_token in client code, but a common practice is to send the id_token to a backend server and perform the validation there.

Talvez você também queira validar declarações adicionais, dependendo do cenário.You may also wish 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 assinado para usar o aplicativo.Ensuring the user/organization has signed up for the app.
  • Garantir que o usuário tenha autorização/privilégios adequados usando wids as roles declarações ou.Ensuring the user has proper authorization/privileges using the wids or roles claims.
  • Garantir que uma determinada intensidade de autenticação tenha ocorrido, como autenticação multifator.Ensuring a certain strength of authentication has occurred, such as multi-factor authentication.

Depois de ter validado o id_token, você poderá iniciar uma sessão com o usuário e usar declarações no id_token para obter informações sobre o usuário no seu aplicativo.Once you have validated the id_token, you can begin a session with the user and use the claims in the id_token to obtain information about the user in your app. Essas informações podem ser usadas para exibição, registros, personalização, etc. Para obter mais informações id_tokens e declarações, leia AAD id_tokens.This information can be used for display, records, personalization, etc. For more information about id_tokens and claims, read AAD id_tokens.

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 wish to sign the user out of the app, it is not sufficient to clear your app's cookies or otherwise end the session with the user. Você também deve redirecionar o usuário para o end_session_endpoint para sair. Se você não conseguir fazer isso, o usuário poderá se autenticar novamente em seu aplicativo sem inserir suas credenciais novamente, pois eles terão uma sessão de logon único válida com o ponto de extremidade do Azure AD.You must also redirect the user to the end_session_endpoint for sign-out. If you fail to do so, the user will be able to reauthenticate to your app without entering their credentials again, because they will have a valid single sign-on session with the Azure AD endpoint.

Você pode simplesmente redirecionar o usuário para o end_session_endpoint listado no documento de metadados do OpenID Connect:You can simply redirect the user to the end_session_endpoint listed in the OpenID Connect metadata document:

GET https://login.microsoftonline.com/common/oauth2/logout?
post_logout_redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F

ParâmetroParameter TypeType DescriçãoDescription
post_logout_redirect_uripost_logout_redirect_uri recomendávelrecommended A URL para a qual o usuário deve ser redirecionado após a saída bem-sucedida. Essa URL deve corresponder a um dos URIs de redirecionamento registrados para seu aplicativo no portal de registro de aplicativo.The URL that the user should be redirected to after successful sign out. This URL must match one of the redirect URIs registered for your application in the app registration portal. Se post_logout_redirect_uri não for incluído, o usuário será exibido como uma mensagem genérica.If post_logout_redirect_uri is not included, the user is shown a generic message.

Logout únicoSingle sign-out

Quando você redireciona o usuário para o end_session_endpoint, o Azure AD limpa a sessão do usuário do navegador.When you redirect the user to the end_session_endpoint, Azure AD clears the user's session from the browser. No entanto, o usuário pode ainda entrar em outros aplicativos que usam o Azure AD para autenticação.However, the user may still be signed in to other applications that use Azure AD for authentication. Para permitir que esses aplicativos desconectem o usuário simultaneamente, o Azure AD envia uma solicitação HTTP GET para o LogoutUrl de todos os aplicativos aos quais o usuário está atualmente conectado.To enable those applications to sign the user out simultaneously, Azure AD sends an HTTP GET request to the registered LogoutUrl of all the applications that the user is currently signed in to. Os aplicativos devem responder a essa solicitação, limpando as sessões que identificam o usuário e retornando uma resposta 200.Applications must respond to this request by clearing any session that identifies the user and returning a 200 response. Se você deseja dar suporte um logout único em seu aplicativo, você deve implementar um LogoutUrl no código do aplicativo.If you wish to support single sign out in your application, you must implement such a LogoutUrl in your application's code. Você pode definir o LogoutUrl do Portal do Azure:You can set the LogoutUrl from the Azure portal:

  1. Navegue até o Portal do Azure.Navigate to the Azure portal.
  2. Escolha seu Active Directory clicando em sua conta no canto superior direito da página.Choose your Active Directory by clicking on your account in the top right corner of the page.
  3. No painel de navegação esquerdo, escolha Azure Active Directory e, em seguida, escolha Registros de aplicativo e selecione seu aplicativo.From the left hand navigation panel, choose Azure Active Directory, then choose App registrations and select your application.
  4. Clique em ** Configurações **, em ** Propriedades ** e encontre a caixa de texto ** URL de saída **.Click on Settings, then Properties and find the Logout URL text box.

Aquisição de tokenToken Acquisition

Muitos aplicativos Web precisam não apenas conectar o usuário, mas acessar um serviço Web em nome desse usuário usando o OAuth.Many web apps need to not only sign the user in, but also access a web service on behalf of that user using OAuth. Esse cenário combina o OpenID Connect para autenticação de usuário enquanto adquire simultaneamente um authorization_code que pode ser usado para obter access_tokens usando o Fluxo do Código de Autorização do OAuth.This scenario combines OpenID Connect for user authentication while simultaneously acquiring an authorization_code that can be used to get access_tokens using the OAuth Authorization Code Flow.

Obter tokens de acessoGet Access Tokens

Para obter tokens de acesso, você precisará modificar a solicitação de entrada acima:To acquire access tokens, you need to modify the sign-in request from above:

// Line breaks for legibility only

GET https://login.microsoftonline.com/{tenant}/oauth2/authorize?
client_id=6731de76-14a6-49ae-97bc-6eba6914391e        // Your registered Application ID
&response_type=id_token+code
&redirect_uri=http%3A%2F%2Flocalhost%3a12345          // Your registered Redirect Uri, url encoded
&response_mode=form_post                              // `form_post' or 'fragment'
&scope=openid
&resource=https%3A%2F%2Fservice.contoso.com%2F        // The identifier of the protected resource (web API) that your application needs access to
&state=12345                                          // Any value, provided by your app
&nonce=678910                                         // Any value, provided by your app

Ao incluir escopos de permissão na solicitação e usar response_type=code+id_token, o ponto de extremidade authorize terá certeza de que o usuário recebeu as permissões indicadas no parâmetro de consulta scope e retornará ao seu aplicativo um código de autorização para trocar por um token de acesso.By including permission scopes in the request and using response_type=code+id_token, the authorize endpoint ensures that the user has consented to the permissions indicated in the scope query parameter, and return your app an authorization code to exchange for an access token.

Resposta bem-sucedidaSuccessful response

Uma resposta bem-sucedida, enviada ao redirect_uri usando response_mode=form_post , é semelhante a:A successful response, sent to the redirect_uri using response_mode=form_post, looks like:

POST /myapp/ HTTP/1.1
Host: localhost
Content-Type: application/x-www-form-urlencoded

id_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik1uQ19WWmNB...&code=AwABAAAAvPM1KaPlrEqdFSBzjqfTGBCmLdgfSTLEMPGYuNHSUYBrq...&state=12345
ParâmetroParameter DescriçãoDescription
id_tokenid_token O id_token que o aplicativo solicitou.The id_token that the app requested. Você pode usar o id_token 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 authorization_code que o aplicativo solicitou.The authorization_code that the app requested. O aplicativo pode usar o código de autorização para solicitar um token de acesso para o recurso de destino.The app can use the authorization code to request an access token for the target resource. Authorization_codes têm uma duração curta e, geralmente, expiram depois de aproximadamente 10 minutos.Authorization_codes are short lived, and typically expire after about 10 minutes.
statestate Se um parâmetro de estado 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 valores de estado 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.

Resposta de erroError response

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

POST /myapp/ HTTP/1.1
Host: localhost
Content-Type: application/x-www-form-urlencoded

error=access_denied&error_description=the+user+canceled+the+authentication
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 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.

Para obter uma descrição dos possíveis códigos de erro e sua ação recomendada do cliente, veja Códigos de erro para erros de ponto de extremidade de autorização.For a description of the possible error codes and their recommended client action, see Error codes for authorization endpoint errors.

Depois de obter uma autorização code e um id_token , você pode conectar o usuário e obter tokens de acesso em seu nome.Once you've gotten an authorization code and an id_token, you can sign the user in and get access tokens on their behalf. Para conectar o usuário, você deve validar o id_token exatamente como descrito acima.To sign the user in, you must validate the id_token exactly as described above. Para obter tokens de acesso, você pode seguir as etapas descritas na seção "Usar o código de autorização para solicitar um token de acesso" da nossa documentação do fluxo de código OAuth.To get access tokens, you can follow the steps described in the "Use the authorization code to request an access token" section of our OAuth code flow documentation.

Próximas etapasNext steps