Autoriser l’accès aux applications web à l’aide d’OpenID Connect et d’Azure Active DirectoryAuthorize access to web applications using OpenID Connect and Azure Active Directory

OpenID Connect est une couche d’identité simple basée sur le protocole OAuth 2.0.OpenID Connect is a simple identity layer built on top of the OAuth 2.0 protocol. OAuth 2.0 définit des mécanismes permettant d’obtenir et d’utiliser des jetons d’accès pour accéder à des ressources protégées. En revanche, ces mécanismes ne définissent aucune méthode standard pour fournir des informations d’identité.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. OpenID Connect implémente l’authentification en tant qu’extension pour le processus d’autorisation OAuth 2.0.OpenID Connect implements authentication as an extension to the OAuth 2.0 authorization process. Il fournit des informations sur l’utilisateur final sous la forme d’un id_token qui vérifie l’identité de l’utilisateur et fournit des informations de profil de base sur l’utilisateur.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.

Nous recommandons OpenID Connect si vous concevez une application web hébergée sur un serveur et accessible par le biais d’un navigateur.OpenID Connect is our recommendation if you are building a web application that is hosted on a server and accessed via a browser.

Inscrire votre application avec votre client ADRegister your application with your AD tenant

Tout d’abord, vous devez inscrire votre application avec votre client Azure Active Directory (Azure AD).First, you need to register your application with your Azure Active Directory (Azure AD) tenant. Ceci vous fournira un ID d’application pour votre application et lui permettra de recevoir des jetons.This will give you an Application ID for your application, as well as enable it to receive tokens.

  • Connectez-vous au Portail Azure.Sign in to the Azure portal.
  • Choisissez votre locataire Azure AD en cliquant sur votre compte dans le coin supérieur droit de la page, puis en cliquant sur la barre de navigation Changer de répertoire et en sélectionnant ensuite le locataire souhaité.Choose your Azure AD tenant by clicking on your account in the top right corner of the page, followed by clicking on the Switch Directory navigation and then select the appropriate tenant.
    • Ignorez cette étape si vous n’avez qu’un locataire Azure AD sous votre compte ou si vous avez en déjà sélectionné un.Skip this step, if you've only one Azure AD tenant under your account or if you've already selected the appropriate Azure AD tenant.
  • Dans le volet de navigation gauche, cliquez sur Azure Active Directory.In the left hand navigation pane, click on Azure Active Directory.
  • Cliquez sur Inscriptions des applications, puis sur Nouvelle inscription.Click on App Registrations and click on New registration.
  • Suivez les invites et créez une application.Follow the prompts and create a new application. Pour ce didacticiel, il peut s’agir d’une application web ou d’une application client publique (mobile et bureau). Cependant, si vous souhaitez obtenir des exemples spécifiques pour les applications web ou les applications clientes publiques, consultez nos rubriques de démarrage rapide.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.
    • Le nom de l’application donne une description de votre application aux utilisateurs finaux.Name is the application name and describes your application to end users.
    • Sous Types de comptes pris en charge, sélectionnez Comptes dans un annuaire organisationnel et comptes personnels Microsoft.Under Supported account types, select Accounts in any organizational directory and personal Microsoft accounts.
    • Fournissez l’URI de redirection.Provide the Redirect URI. Pour les applications web, il s’agit de l’URL de base de votre application, à laquelle les utilisateurs peuvent se connecter.For Web Applications, this is the base URL of your app where users can sign in. Par exemple : http://localhost:12345.For example, http://localhost:12345. Pour une application cliente publique (mobile et bureau), Azure AD l’utilise pour renvoyer les réponses de jeton.For public client (mobile & desktop), Azure AD uses it to return token responses. Entrez une valeur spécifique à votre application.Enter a value specific to your application. Par exemple : http://MyFirstAADApp.For example, http://MyFirstAADApp.
  • Une fois l’inscription terminée, Azure AD attribue un identificateur client unique à votre application (l’ID d’application).Once you've completed registration, Azure AD will assign your application a unique client identifier (the Application ID). Copiez cette valeur à partir de la page de l’application, car vous en aurez besoin dans les sections suivantes.You need this value in the next sections, so copy it from the application page.
  • Pour trouver votre application dans le portail Azure, cliquez sur Inscriptions des applications, puis sur Afficher toutes les applications.To find your application in the Azure portal, click App registrations, and then click View all applications.

Flux d’authentification à l’aide d’OpenID ConnectAuthentication flow using OpenID Connect

Le flux de connexion le plus simple comprend les étapes suivantes (chacune d’elles est décrite en détail ci-dessous).The most basic sign-in flow contains the following steps - each of them is described in detail below.

Flux d’authentification OpenID Connect

Document de métadonnées OpenID ConnectOpenID Connect metadata document

OpenID Connect décrit un document de métadonnées qui contient la plupart des informations nécessaires pour qu’une application effectue la connexion.OpenID Connect describes a metadata document that contains most of the information required for an app to perform sign-in. Cela inclut des informations telles que les URL à utiliser et l’emplacement des clés de signature publiques du service.This includes information such as the URLs to use and the location of the service's public signing keys. Le document de métadonnées OpenID Connect est disponible ici :The OpenID Connect metadata document can be found at:

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

Les métadonnées représentent un simple document JavaScript Objet Notation (JSON).The metadata is a simple JavaScript Object Notation (JSON) document. Consultez l’extrait suivant pour obtenir un exemple.See the following snippet for an example. Le contenu de l'extrait de code est décrit en détail dans les spécifications d’OpenID Connect.The snippet's contents are fully described in the OpenID Connect specification. Le fait de fournir cet ID de locataire au lieu de common à la place de {tenant} ci-dessus génère des URI spécifiques du locataire dans l’objet JSON renvoyé.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",
    ...
}

Si votre application dispose de clés de signature personnalisées après avoir utilisé la fonctionnalité claims-mapping, vous devez ajouter un paramètre de requête appid contenant l’ID de l’application afin d’obtenir un jwks_uri qui redirige vers l’information de clé de signature de votre application.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. Par exemple : https://login.microsoftonline.com/{tenant}/.well-known/openid-configuration?appid=6731de76-14a6-49ae-97bc-6eba6914391e contient un 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.

Envoyer la requête de connexionSend the sign-in request

Lorsque votre application web a besoin d’authentifier l’utilisateur, elle doit le diriger vers le point de terminaison /authorize.When your web application needs to authenticate the user, it must direct the user to the /authorize endpoint. Cette requête est similaire au premier tronçon du flux de code d’autorisation OAuth 2.0. Notons toutefois quelques distinctions importantes :This request is similar to the first leg of the OAuth 2.0 Authorization Code Flow, with a few important distinctions:

  • La requête doit inclure l’étendue openid dans le paramètre scope.The request must include the scope openid in the scope parameter.
  • Le paramètre response_type doit inclure id_token.The response_type parameter must include id_token.
  • La demande doit inclure le paramètre nonce .The request must include the nonce parameter.

Voici donc un exemple de requête :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
ParamètreParameter DescriptionDescription
locatairetenant requiredrequired La valeur {tenant} dans le chemin d’accès de la requête peut être utilisée pour contrôler les utilisateurs qui peuvent se connecter à l’application.The {tenant} value in the path of the request can be used to control who can sign into the application. Les valeurs autorisées sont les identificateurs du client, par exemple 8eaef023-2b34-4da1-9baa-8bc8c9d6a490, contoso.onmicrosoft.com ou common pour les jetons indépendants du clientThe 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 requiredrequired L’ID de l’application assignée à votre application lorsque vous l’avez inscrite auprès d’Azure AD.The Application ID assigned to your app when you registered it with Azure AD. Vous le trouverez sur le portail Azure.You can find this in the Azure portal. Cliquez sur Azure Active Directory, puis sur Inscriptions des applications. Sélectionnez ensuite l’application et recherchez son ID sur la page de l’application.Click Azure Active Directory, click App Registrations, choose the application and locate the Application ID on the application page.
response_typeresponse_type requiredrequired Doit inclure id_token pour la connexion à OpenID Connect.Must include id_token for OpenID Connect sign-in. Il peut inclure d’autres response_type, comme code ou token.It may also include other response_types, such as code or token.
scopescope recommandérecommended La spécification OpenID Connect requiert l’étendue openid, qui correspond à l’autorisation de connexion dans l’interface utilisateur de consentement.The OpenID Connect specification requires the scope openid, which translates to the "Sign you in" permission in the consent UI. Cette étendue et d’autres étendues OIDC sont ignorées sur le point de terminaison v1.0, mais cela reste une meilleure pratique pour les clients respectant les normes.This and other OIDC scopes are ignored on the v1.0 endpoint, but is still a best practice for standards-compliant clients.
noncenonce requiredrequired Valeur incluse dans la demande (générée par l’application) qui est intégrée au jeton id_token obtenu sous la forme d’une revendication.A value included in the request, generated by the app, that is included in the resulting id_token as a claim. L’application peut ensuite vérifier cette valeur afin de contrer les attaques par relecture de jetons.The app can then verify this value to mitigate token replay attacks. La valeur est généralement une valeur unique et aléatoire ou un GUID pouvant être utilisé pour identifier l’origine de la requête.The value is typically a randomized, unique string or GUID that can be used to identify the origin of the request.
redirect_uriredirect_uri recommandérecommended L’URI de redirection de votre application, vers lequel votre application peut envoyer et recevoir des réponses d’authentification.The redirect_uri of your app, where authentication responses can be sent and received by your app. Il doit correspondre exactement à l’un des URI de redirection enregistrés dans le portail, auquel s’ajoute le codage dans une URL.It must exactly match one of the redirect_uris you registered in the portal, except it must be url encoded. S’il est manquant, l’agent utilisateur est redirigé vers l’un des URI de redirection enregistrés pour l’application, de manière aléatoire.If missing, the user agent will be sent back to one of the redirect URIs registered for the app, at random. La longueur maximale est de 255 octets.The maximum length is 255 bytes
response_moderesponse_mode facultatifoptional Spécifie la méthode à utiliser pour envoyer le code d’autorisation résultant à votre application.Specifies the method that should be used to send the resulting authorization_code back to your app. Les valeurs prises en charge sont form_post pour une requête HTTP POST de type formulaire et fragment pour un fragment d’URL.Supported values are form_post for HTTP form post and fragment for URL fragment. Pour les applications web, nous vous recommandons d’utiliser response_mode=form_post pour garantir le transfert le plus sécurisé des jetons à votre application.For web applications, we recommend using response_mode=form_post to ensure the most secure transfer of tokens to your application. La valeur par défaut pour n’importe quel flux, y compris id_token, est fragment.The default for any flow including an id_token is fragment.
statestate recommandérecommended Une valeur incluse dans la requête qui est également renvoyée dans la réponse de jeton.A value included in the request that is returned in the token response. Il peut s’agir d’une chaîne du contenu de votre choix.It can be a string of any content that you wish. Une valeur unique générée de manière aléatoire est généralement utilisée pour empêcher les falsifications de requête intersite.A randomly generated unique value is typically used for preventing cross-site request forgery attacks. La valeur d’état est également utilisée pour coder les informations sur l’état de l’utilisateur dans l’application avant la requête d’authentification, comme la page ou l’écran sur lequel ou laquelle il était positionné.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 facultatifoptional Indique le type d’interaction utilisateur requis.Indicates the type of user interaction that is required. Les seules valeurs valides pour l’instant sont « login », « none » et « consent ».Currently, the only valid values are 'login', 'none', and 'consent'. prompt=login oblige l’utilisateur à saisir ses informations d’identification lors de cette requête, annulant de fait l’authentification unique.prompt=login forces the user to enter their credentials on that request, negating single-sign on. Avec prompt=none, c’est le comportement inverse. Cette valeur vous garantit qu’aucune invite interactive d’aucune sorte n’est présentée à l’utilisateur.prompt=none is the opposite - it ensures that the user is not presented with any interactive prompt whatsoever. Si la demande ne peut pas être exécutée en mode silencieux au moyen d’une authentification unique, le point de terminaison renvoie une erreur.If the request cannot be completed silently via single-sign on, the endpoint returns an error. prompt=consent déclenche l’affichage de la boîte de dialogue de consentement OAuth après la connexion de l’utilisateur, afin de lui demander d’octroyer des autorisations à l’application.prompt=consent triggers the OAuth consent dialog after the user signs in, asking the user to grant permissions to the app.
login_hintlogin_hint facultatifoptional Peut être utilisé pour remplir au préalable le champ réservé au nom d’utilisateur/à l’adresse électronique de la page de connexion de l’utilisateur si vous connaissez déjà son nom d’utilisateur.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. Les applications utilisent souvent ce paramètre au cours de la réauthentification, après avoir extrait le nom d’utilisateur d’une connexion précédente à l’aide de la revendication preferred_username.Often apps use this parameter during reauthentication, having already extracted the username from a previous sign-in using the preferred_username claim.

À ce stade, l’utilisateur est invité à saisir ses informations d’identification et à exécuter l’authentification.At this point, the user is asked to enter their credentials and complete the authentication.

Exemple de réponseSample response

Voici un exemple de réponse envoyée au paramètre redirect_uri spécifié dans la requête de connexion une fois l’utilisateur authentifié :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
ParamètreParameter DescriptionDescription
id_tokenid_token Jeton id_token que l’application a demandé.The id_token that the app requested. Vous pouvez utiliser ce jeton id_token pour vérifier l’identité de l’utilisateur et démarrer une session avec lui.You can use the id_token to verify the user's identity and begin a session with the user.
statestate Une valeur incluse dans la requête qui est également renvoyée dans la réponse de jeton.A value included in the request that is also returned in the token response. Une valeur unique générée de manière aléatoire est généralement utilisée pour empêcher les falsifications de requête intersite.A randomly generated unique value is typically used for preventing cross-site request forgery attacks. La valeur d’état est également utilisée pour coder les informations sur l’état de l’utilisateur dans l’application avant la requête d’authentification, comme la page ou l’écran sur lequel ou laquelle il était positionné.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.

Réponse d’erreurError response

Les réponses d’erreur peuvent également être envoyées à l’élément redirect_uri , de manière à ce que l’application puisse les traiter de manière appropriée :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
ParamètreParameter DescriptionDescription
errorerror Une chaîne de code d’erreur pouvant être utilisée pour classer les types d’erreur se produisant, et pouvant être utilisée pour intervenir face aux erreurs.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 Un message d’erreur spécifique qui peut aider un développeur à identifier la cause principale d’une erreur d’authentification.A specific error message that can help a developer identify the root cause of an authentication error.

Codes d’erreur pour les erreurs de point de terminaison d’autorisationError codes for authorization endpoint errors

Le tableau suivant décrit les différents codes d’erreur qui peuvent être retournés dans le paramètre error de la réponse d’erreur.The following table describes the various error codes that can be returned in the error parameter of the error response.

Code d'erreurError Code DescriptionDescription Action du clientClient Action
invalid_requestinvalid_request Erreur de protocole, tel qu’un paramètre obligatoire manquant.Protocol error, such as a missing required parameter. Corrigez l’erreur, puis envoyez à nouveau la demande.Fix and resubmit the request. Il s’agit d’une erreur de développement généralement détectée lors des tests initiaux.This is a development error, and is typically caught during initial testing.
unauthorized_clientunauthorized_client L’application cliente n’est pas autorisée à demander un code d’autorisation.The client application is not permitted to request an authorization code. Cela se produit généralement lorsque l’application cliente n’est pas inscrite dans Azure AD ou n’est pas ajoutée au client Azure AD de l’utilisateur.This usually occurs when the client application is not registered in Azure AD or is not added to the user's Azure AD tenant. L’application peut proposer à l’utilisateur des instructions pour installer l’application et l’ajouter à Azure AD.The application can prompt the user with instruction for installing the application and adding it to Azure AD.
access_deniedaccess_denied Le propriétaire de la ressource n’a pas accordé son consentement.Resource owner denied consent L’application cliente peut avertir l’utilisateur qu’elle ne peut pas continuer sans son consentement.The client application can notify the user that it cannot proceed unless the user consents.
unsupported_response_typeunsupported_response_type Le serveur d’autorisation ne prend pas en charge le type de réponse dans la demande.The authorization server does not support the response type in the request. Corrigez l’erreur, puis envoyez à nouveau la demande.Fix and resubmit the request. Il s’agit d’une erreur de développement généralement détectée lors des tests initiaux.This is a development error, and is typically caught during initial testing.
server_errorserver_error Le serveur a rencontré une erreur inattendue.The server encountered an unexpected error. relancez la requête.Retry the request. Ces erreurs peuvent résulter de conditions temporaires.These errors can result from temporary conditions. L’application cliente peut expliquer à l’utilisateur que sa réponse est reportée en raison d’une erreur temporaire.The client application might explain to the user that its response is delayed due to a temporary error.
temporarily_unavailabletemporarily_unavailable Le serveur est temporairement trop occupé pour traiter la demande.The server is temporarily too busy to handle the request. relancez la requête.Retry the request. L’application cliente peut expliquer à l’utilisateur que sa réponse est reportée en raison d’une condition temporaire.The client application might explain to the user that its response is delayed due to a temporary condition.
invalid_resourceinvalid_resource La ressource cible n’est pas valide car elle n’existe pas, Azure AD ne la trouve pas ou elle n’est pas configurée correctement.The target resource is invalid because it does not exist, Azure AD cannot find it, or it is not correctly configured. Cela indique que la ressource, si elle existe, n’a pas été configurée dans le client.This indicates the resource, if it exists, has not been configured in the tenant. L’application peut proposer à l’utilisateur des instructions pour installer l’application et l’ajouter à Azure AD.The application can prompt the user with instruction for installing the application and adding it to Azure AD.

Valider le jeton id_tokenValidate the id_token

La réception du jeton id_token ne suffit pas à authentifier l’utilisateur. Vous devez valider la signature et vérifier la conformité des revendications du jeton id_token par rapport à la configuration requise de votre application.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. Le point de terminaison Azure AD utilise les jetons web JSON (JWT) et le chiffrement de clés publiques pour signer les jetons et vérifier leur validité.The Azure AD endpoint uses JSON Web Tokens (JWTs) and public key cryptography to sign tokens and verify that they are valid.

Vous pouvez décider de valider l’élément id_token dans le code du client, mais une pratique courante consiste à envoyer l’élément id_token vers un serveur principal, afin d’y appliquer la validation.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.

En fonction de votre scénario, vous pouvez également valider des revendications supplémentaires.You may also wish to validate additional claims depending on your scenario. Voici quelques validations courantes :Some common validations include:

  • S’assurer que l’utilisateur/l’organisation s’est inscrit pour l’application.Ensuring the user/organization has signed up for the app.
  • S’assurer que l’utilisateur dispose de l’autorisation/des privilèges appropriés à l’aide des revendications wids ou roles.Ensuring the user has proper authorization/privileges using the wids or roles claims.
  • S’assurer de l’utilisation d’une force certaine d’authentification, comme une authentification multifacteur.Ensuring a certain strength of authentication has occurred, such as multi-factor authentication.

Une fois que vous avez validé le jeton id_token, vous pouvez démarrer une session avec l’utilisateur et utiliser les revendications du jeton id_token pour récupérer les informations sur l’utilisateur dans votre application.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. Ces informations peuvent être utilisées pour l’affichage, les enregistrements, la personnalisation, etc. Pour plus d’informations sur id_tokens et sur les revendications, reportez-vous à AAD id_tokens (id_tokens AAD).This information can be used for display, records, personalization, etc. For more information about id_tokens and claims, read AAD id_tokens.

Envoi d’une demande de déconnexionSend a sign-out request

Lorsque vous souhaitez déconnecter l'utilisateur de l'application, la suppression des cookies de votre application ou l’arrêt de la session de l’utilisateur ne suffisent pas.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. Vous devez également rediriger l’utilisateur vers le end_session_endpoint pour suivre la procédure de déconnexion. Si vous n’y parvenez pas, l’utilisateur sera en mesure de se réauthentifier à votre application sans avoir à saisir de nouveau ses informations d’identification, car il disposera d’une session d’authentification unique valide auprès du point de terminaison 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.

Vous pouvez simplement rediriger l’utilisateur vers le end_session_endpoint répertorié dans le document de métadonnées 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

ParamètreParameter DescriptionDescription
post_logout_redirect_uripost_logout_redirect_uri recommandérecommended URL vers laquelle l’utilisateur doit être redirigé après la déconnexion. Si elle n’est pas incluse, l’utilisateur voit un message générique.The URL that the user should be redirected to after successful sign out. If not included, the user is shown a generic message.

Authentification uniqueSingle sign-out

Lorsque vous redirigez l’utilisateur vers end_session_endpoint, Azure AD efface la session de l’utilisateur dans le navigateur.When you redirect the user to the end_session_endpoint, Azure AD clears the user's session from the browser. Toutefois, l’utilisateur peut rester connecté à d’autres applications qui utilisent Azure AD pour l’authentification.However, the user may still be signed in to other applications that use Azure AD for authentication. Pour permettre à ces applications de déconnecter simultanément l’utilisateur, Azure AD envoie une requête HTTP GET au paramètre LogoutUrl enregistré de toutes les applications auxquelles l’utilisateur est actuellement connecté.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. Les applications doivent répondre à cette requête en effaçant toute session qui identifie l’utilisateur et en renvoyant une réponse 200.Applications must respond to this request by clearing any session that identifies the user and returning a 200 response. Si vous souhaitez prendre en charge la déconnexion unique dans votre application, vous devez implémenter ce paramètre LogoutUrl dans le code de votre application.If you wish to support single sign out in your application, you must implement such a LogoutUrl in your application's code. Vous pouvez définir le paramètre LogoutUrl à partir du portail Azure :You can set the LogoutUrl from the Azure portal:

  1. Accédez au portail Azure.Navigate to the Azure portal.
  2. Sélectionnez votre client Active Directory en cliquant sur votre compte en haut à droite de la page.Choose your Active Directory by clicking on your account in the top right corner of the page.
  3. Dans le volet de navigation de gauche, choisissez Azure Active Directory, Inscriptions des applications puis sélectionnez votre application.From the left hand navigation panel, choose Azure Active Directory, then choose App registrations and select your application.
  4. Cliquez sur Propriétés, puis sur Propriétés et recherchez la zone de texte URL de déconnexion.Click on Settings, then Properties and find the Logout URL text box.

Acquisition de jetonToken Acquisition

Beaucoup d’applications web nécessitent une connexion de l’utilisateur, puis un accès au service web pour le compte de cet utilisateur à l’aide d’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. Ce scénario utilise OpenID Connect pour l’authentification de l’utilisateur tout en récupérant un authorization_code pouvant être sollicité pour obtenir des jetons access_tokens à l’aide du flux de code d’autorisation 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.

Obtenir des jetons d’accèsGet Access Tokens

Pour acquérir des jetons d’accès, vous devez modifier la requête de connexion ci-dessus :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

En incluant des étendues d’autorisation dans la demande et en utilisant response_type=code+id_token, le point de terminaison authorize garantit que l’utilisateur a accepté les autorisations indiquées dans le paramètre de requête scope et renvoie un code d’autorisation à votre application afin de l’échanger contre un jeton d’accès.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.

Réponse correcteSuccessful response

Une réponse correcte envoyée à redirect_uri avec response_mode=form_post se présente ainsi :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
ParamètreParameter DescriptionDescription
id_tokenid_token Jeton id_token que l’application a demandé.The id_token that the app requested. Vous pouvez utiliser ce jeton id_token pour vérifier l’identité de l’utilisateur et démarrer une session avec lui.You can use the id_token to verify the user's identity and begin a session with the user.
codecode Le code d’autorisation demandé par l’application.The authorization_code that the app requested. L’application peut utiliser ce code d’autorisation pour demander un jeton d’accès pour la ressource cible.The app can use the authorization code to request an access token for the target resource. Les codes d’autorisation présentent une durée de vie courte. Généralement, ils expirent au bout de 10 minutes.Authorization_codes are short lived, and typically expire after about 10 minutes.
statestate Si un paramètre d’état est inclus dans la demande, la même valeur doit apparaître dans la réponse.If a state parameter is included in the request, the same value should appear in the response. L’application doit vérifier que les valeurs d’état de la demande et de la réponse sont identiques.The app should verify that the state values in the request and response are identical.

Réponse d’erreurError response

Les réponses d’erreur peuvent également être envoyées à l’élément redirect_uri , de manière à ce que l’application puisse les traiter de manière appropriée :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
ParamètreParameter DescriptionDescription
errorerror Une chaîne de code d’erreur pouvant être utilisée pour classer les types d’erreur se produisant, et pouvant être utilisée pour intervenir face aux erreurs.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 Un message d’erreur spécifique qui peut aider un développeur à identifier la cause principale d’une erreur d’authentification.A specific error message that can help a developer identify the root cause of an authentication error.

Pour obtenir une description des codes d’erreur éventuels et connaître l’action client recommandée associée, consultez Codes d’erreur pour les erreurs de point de terminaison d’autorisation.For a description of the possible error codes and their recommended client action, see Error codes for authorization endpoint errors.

Une fois que vous avez obtenu une autorisation code et un id_token, vous pouvez connecter l’utilisateur et obtenir des jetons d’accès en son nom.Once you've gotten an authorization code and an id_token, you can sign the user in and get access tokens on their behalf. Pour connecter l’utilisateur, vous devez valider le id_token conformément à la description indiquée ci-dessus.To sign the user in, you must validate the id_token exactly as described above. Pour obtenir des jetons d’accès, vous pouvez suivre la procédure décrite dans la section « Utiliser le code d’autorisation pour demander un jeton d’accès » de notre documentation de flux de code 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.

Étapes suivantesNext steps