Autoriser l’accès aux applications web Azure Active Directory à l’aide du flux d’octroi de code OAuth 2.0Authorize access to Azure Active Directory web applications using the OAuth 2.0 code grant flow

Notes

Si vous n’indiquez pas au serveur quelle ressource vous envisagez d’appeler, il ne déclenche pas les stratégies d’accès conditionnel de cette ressource.If you don't tell the server what resource you plan to call, then the server will not trigger the Conditional Access policies for that resource. Ainsi, pour que l’authentification MFA se déclenche, vous devez inclure une ressource dans votre URL.So in order to have MFA trigger, you will need to include a resource in your URL.

Azure Active Directory (Azure AD) utilise OAuth 2.0 pour vous permettre d’autoriser l’accès aux applications web et aux API web dans votre client Azure AD.Azure Active Directory (Azure AD) uses OAuth 2.0 to enable you to authorize access to web applications and web APIs in your Azure AD tenant. Ce guide est indépendant du langage. Il explique comment envoyer et recevoir des messages HTTP sans utiliser l’une de nos bibliothèques open source.This guide is language independent, and describes how to send and receive HTTP messages without using any of our open-source libraries.

Le flux de code d’autorisation OAuth 2.0 est décrit dans la section 4.1 des spécifications OAuth 2.0.The OAuth 2.0 authorization code flow is described in section 4.1 of the OAuth 2.0 specification. Il est utilisé pour exécuter des activités d’authentification et d’autorisation dans la majorité des types d’applications, notamment les applications web et les applications installées de façon native.It is used to perform authentication and authorization in most application types, including web apps and natively installed apps.

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

Tout d’abord, inscrivez votre application avec votre client Azure Active Directory (Azure AD).First, 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.

  1. Connectez-vous au Portail Azure.Sign in to the Azure portal.

  2. Choisissez votre locataire Azure AD en sélectionnant votre compte dans l’angle supérieur droit de la page. Sélectionnez ensuite la barre de navigation Changer de répertoire, puis le locataire souhaité.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.

    • 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 only have one Azure AD tenant under your account, or if you've already selected the appropriate Azure AD tenant.
  3. Dans le Portail Azure, recherchez et sélectionnez Azure Active Directory.In the Azure portal, search for and select Azure Active Directory.

  4. Dans le menu gauche Active Directory, sélectionnez Inscriptions d’applications, puis Nouvelle inscription.In the Azure Active Directory left menu, select App Registrations, and then select New registration.

  5. 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.
  6. 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.

  7. Pour trouver votre application dans le portail Azure, sélectionnez Inscriptions des applications, puis Afficher toutes les applications.To find your application in the Azure portal, select App registrations, and then select View all applications.

Flux d’autorisation OAuth 2.0OAuth 2.0 authorization flow

À un niveau élevé, le flux d’autorisation complet pour une application est semblable à l’illustration suivante :At a high level, the entire authorization flow for an application looks a bit like this:

Flux de code d’authentification OAuth

Demander un code d’autorisationRequest an authorization code

Le flux de code d'autorisation commence par le client dirigeant l'utilisateur vers le point de terminaison /authorize .The authorization code flow begins with the client directing the user to the /authorize endpoint. Dans cette requête, le client indique les autorisations qu’il doit obtenir auprès de l’utilisateur :In this request, the client indicates the permissions it needs to acquire from the user. Vous pouvez obtenir le point de terminaison d’autorisation OAuth 2.0 pour votre client en sélectionnant Inscriptions d’applications > Points de terminaison dans le portail Azure.You can get the OAuth 2.0 authorization endpoint for your tenant by selecting App registrations > Endpoints in the Azure portal.

// Line breaks for legibility only

https://login.microsoftonline.com/{tenant}/oauth2/authorize?
client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&response_type=code
&redirect_uri=http%3A%2F%2Flocalhost%3A12345
&response_mode=query
&resource=https%3A%2F%2Fservice.contoso.com%2F
&state=12345
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 dans le volet de services, sur Inscriptions des applications, puis choisissez l’application.Click Azure Active Directory in the services sidebar, click App registrations, and choose the application.
response_typeresponse_type requiredrequired Doit inclure code pour le flux de code d’autorisation.Must include code for the authorization code flow.
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. Pour les applications natives et mobiles, vous devez utiliser la valeur par défaut urn:ietf:wg:oauth:2.0:oob.For native & mobile apps, you should use the default value of urn:ietf:wg:oauth:2.0:oob.
response_moderesponse_mode facultatifoptional Spécifie la méthode à utiliser pour envoyer le jeton résultant à votre application.Specifies the method that should be used to send the resulting token back to your app. Peut être query, fragment ou form_post.Can be query, fragment, or form_post. query fournit le code en tant que paramètre d’une chaîne de requête sur votre URI de redirection.query provides the code as a query string parameter on your redirect URI. Si vous demandez un jeton ID à l’aide du flux implicite, vous ne pouvez pas utiliser query comme indiqué dans les spécifications OpenID. Si vous ne demandez que le code, vous pouvez utiliser query, fragment ou form_post.If you're requesting an ID token using the implicit flow, you cannot use query as specified in the OpenID spec. If you're requesting just the code, you can use query, fragment, or form_post. form_post exécute une requête POST contenant le code pour votre URI de redirection.form_post executes a POST containing the code to your redirect URI. La valeur par défaut est query pour un flux de code.The default is query for a code flow.
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 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.
resourceresource recommandérecommended URI ID d’application de l’API web cible (ressource sécurisée).The App ID URI of the target web API (secured resource). Pour rechercher l’URI de l’ID d’application, dans le portail Azure, cliquez sur Azure Active Directory, Inscriptions des applications, ouvrez la page Paramètres de l’application, puis cliquez sur Propriétés.To find the App ID URI, in the Azure Portal, click Azure Active Directory, click Application registrations, open the application's Settings page, then click Properties. Il peut également s’agir d’une ressource externe comme https://graph.microsoft.com.It may also be an external resource like https://graph.microsoft.com. Il est nécessaire dans les requêtes de jeton ou d’autorisation.This is required in one of either the authorization or token requests. Pour réduire le nombre d’invites d’authentification, placez-le dans la requête d’autorisation afin d’être sûr que le consentement est reçu par l’utilisateur.To ensure fewer authentication prompts place it in the authorization request to ensure consent is received from the user.
scopescope ignoréignored Pour les applications Azure AD v1, les étendues doivent être configurées statiquement dans le portail Azure dans les Paramètres de l’application, sous Autorisations requises.For v1 Azure AD apps, scopes must be statically configured in the Azure Portal under the applications Settings, Required Permissions.
promptprompt facultatifoptional Indique le type d’interaction utilisateur requis.Indicate the type of user interaction that is required.

Les valeurs autorisées sont :Valid values are:

login : l’utilisateur doit être invité à se réauthentifier.login: The user should be prompted to reauthenticate.

select_account : l’utilisateur est invité à sélectionner un compte, mettant ainsi fin à l’authentification unique.select_account: The user is prompted to select an account, interrupting single sign on. L’utilisateur peut sélectionner un compte connecté existant, entrer ses informations d’identification pour un compte mémorisé ou choisir d’utiliser un autre compte.The user may select an existing signed-in account, enter their credentials for a remembered account, or choose to use a different account altogether.

consent : le consentement de l’utilisateur a été accordé, mais il doit être mis à jour.consent: User consent has been granted, but needs to be updated. L’utilisateur doit être invité à donner son consentement.The user should be prompted to consent.

admin_consent : un administrateur doit être invité à donner son consentement pour le compte de tous les utilisateurs de son organisation.admin_consent: An administrator should be prompted to consent on behalf of all users in their organization

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.
domain_hintdomain_hint facultatifoptional Fournit une indication sur le client ou le domaine que l’utilisateur doit utiliser pour se connecter.Provides a hint about the tenant or domain that the user should use to sign in. La valeur du paramètre domain_hint est un domaine inscrit pour le client.The value of the domain_hint is a registered domain for the tenant. Si le client est fédéré sur un répertoire local, AAD redirige vers le serveur de fédération du client spécifié.If the tenant is federated to an on-premises directory, AAD redirects to the specified tenant federation server.
code_challenge_methodcode_challenge_method recommandérecommended La méthode utilisée pour encoder le code_verifier pour le paramètre code_challenge.The method used to encode the code_verifier for the code_challenge parameter. Peut être plain ou S256.Can be one of plain or S256. S’il est exclu, code_challenge est censé être dans un texte en clair si code_challenge est inclus.If excluded, code_challenge is assumed to be plaintext if code_challenge is included. Azure AAD v1.0 prend en charge plain et S256.Azure AAD v1.0 supports both plain and S256. Pour plus d'informations, consultez le RFC PKCE.For more information, see the PKCE RFC.
code_challengecode_challenge recommandérecommended Utilisé pour sécuriser l’octroi du code d’autorisation par le biais de l’échange PKCE (Proof Key for Code Exchange) à partir d’un client natif ou public.Used to secure authorization code grants via Proof Key for Code Exchange (PKCE) from a native or public client. Obligatoire si code_challenge_method est inclus.Required if code_challenge_method is included. Pour plus d'informations, consultez le RFC PKCE.For more information, see the PKCE RFC.

Notes

Si l’utilisateur fait partie d’une organisation, un administrateur de l’organisation peut donner son consentement ou refuser pour le compte de l’utilisateur, ou autoriser l’utilisateur à donner son consentement.If the user is part of an organization, an administrator of the organization can consent or decline on the user's behalf, or permit the user to consent. L’utilisateur a la possibilité de donner son consentement uniquement lorsque l’administrateur le lui permet.The user is given the option to consent only when the administrator permits it.

À ce stade, l’utilisateur est invité à entrer ses informations d’identification et à donner son consentement vis-à-vis des autorisations demandées par l’application dans le portail Azure.At this point, the user is asked to enter their credentials and consent to the permissions requested by the app in the Azure Portal. Une fois que l’utilisateur s’est authentifié et a donné son consentement, Azure AD envoie une réponse à votre application à l’adresse redirect_uri dans votre requête avec le code.Once the user authenticates and grants consent, Azure AD sends a response to your app at the redirect_uri address in your request with the code.

Réponse correcteSuccessful response

Une réponse réussie se présenterait ainsi :A successful response could look like this:

GET  HTTP/1.1 302 Found
Location: http://localhost:12345/?code= AwABAAAAvPM1KaPlrEqdFSBzjqfTGBCmLdgfSTLEMPGYuNHSUYBrqqf_ZT_p5uEAEJJ_nZ3UmphWygRNy2C3jJ239gV_DBnZ2syeg95Ki-374WHUP-i3yIhv5i-7KU2CEoPXwURQp6IVYMw-DjAOzn7C3JCu5wpngXmbZKtJdWmiBzHpcO2aICJPu1KvJrDLDP20chJBXzVYJtkfjviLNNW7l7Y3ydcHDsBRKZc3GuMQanmcghXPyoDg41g8XbwPudVh7uCmUponBQpIhbuffFP_tbV8SNzsPoFz9CLpBCZagJVXeqWoYMPe2dSsPiLO9Alf_YIe5zpi-zY4C3aLw5g9at35eZTfNd0gBRpR5ojkMIcZZ6IgAA&session_state=7B29111D-C220-4263-99AB-6F6E135D75EF&state=D79E5777-702E-4260-9A62-37F75FF22CCE
ParamètreParameter DescriptionDescription
admin_consentadmin_consent La valeur est True si un administrateur a donné son consentement lorsqu’il y a été invité.The value is True if an administrator consented to a consent request prompt.
codecode Le code d’autorisation demandé par l’application.The authorization code that the application requested. L’application peut utiliser ce code d’autorisation pour demander un jeton d’accès pour la ressource cible.The application can use the authorization code to request an access token for the target resource.
session_statesession_state Une valeur unique identifiant la session utilisateur actuelle.A unique value that identifies the current user session. Cette valeur est un GUID, mais doit être traitée comme une valeur opaque n’ayant fait l’objet d’aucune analyse.This value is a GUID, but should be treated as an opaque value that is passed without examination.
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. Avant d’utiliser la réponse, il est recommandé que l’application vérifie que les valeurs d’état de la demande et de la réponse sont identiques.It's a good practice for the application to verify that the state values in the request and response are identical before using the response. Cela permet de détecter les attaques par falsification de requête intersites (CSRF, Cross Site Request Forgery) menaçant le client.This helps to detect Cross-Site Request Forgery (CSRF) attacks against the client.

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 that the application can handle them appropriately.

GET http://localhost:12345/?
error=access_denied
&error_description=the+user+canceled+the+authentication
ParamètreParameter DescriptionDescription
errorerror Une valeur de code d’erreur définie dans la section 5.2 du document OAuth 2.0 Authorization Framework(Infrastructure d’autorisation OAuth 2.0).An error code value defined in Section 5.2 of the OAuth 2.0 Authorization Framework. Le tableau suivant décrit les codes d’erreur retournés par Azure AD.The next table describes the error codes that Azure AD returns.
error_descriptionerror_description Une description plus détaillée de l’erreur.A more detailed description of the error. Ce message n’est pas destiné à offrir une description claire à l’utilisateur final.This message is not intended to be end-user friendly.
statestate La valeur d’état est une valeur non réutilisée, générée de manière aléatoire, envoyée dans la demande et retournée dans la réponse pour empêcher les falsifications de requête intersites (CSRF, Cross Site Request Forgery).The state value is a randomly generated non-reused value that is sent in the request and returned in the response to prevent cross-site request forgery (CSRF) attacks.

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.

Utiliser le code d’autorisation pour demander un jeton d’accèsUse the authorization code to request an access token

Maintenant que vous avez acquis un code d’autorisation et que l’utilisateur vous a octroyé une autorisation, vous pouvez échanger le code contre un jeton d’accès à la ressource souhaitée, en envoyant une demande POST au point de terminaison /token :Now that you've acquired an authorization code and have been granted permission by the user, you can redeem the code for an access token to the desired resource, by sending a POST request to the /token endpoint:

// Line breaks for legibility only

POST /{tenant}/oauth2/token HTTP/1.1
Host: https://login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code
&client_id=2d4d11a2-f814-46a7-890a-274a72a7309e
&code=AwABAAAAvPM1KaPlrEqdFSBzjqfTGBCmLdgfSTLEMPGYuNHSUYBrqqf_ZT_p5uEAEJJ_nZ3UmphWygRNy2C3jJ239gV_DBnZ2syeg95Ki-374WHUP-i3yIhv5i-7KU2CEoPXwURQp6IVYMw-DjAOzn7C3JCu5wpngXmbZKtJdWmiBzHpcO2aICJPu1KvJrDLDP20chJBXzVYJtkfjviLNNW7l7Y3ydcHDsBRKZc3GuMQanmcghXPyoDg41g8XbwPudVh7uCmUponBQpIhbuffFP_tbV8SNzsPoFz9CLpBCZagJVXeqWoYMPe2dSsPiLO9Alf_YIe5zpi-zY4C3aLw5g9at35eZTfNd0gBRpR5ojkMIcZZ6IgAA
&redirect_uri=https%3A%2F%2Flocalhost%3A12345
&resource=https%3A%2F%2Fservice.contoso.com%2F
&client_secret=p@ssw0rd

//NOTE: client_secret only required for web apps
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 d’application attribué à 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. L’ID d’application s’affiche dans les paramètres de l’inscription de l’application.The Application Id is displayed in the settings of the app registration.
grant_typegrant_type requiredrequired Doit être authorization_code pour le flux de code d'autorisation.Must be authorization_code for the authorization code flow.
codecode requiredrequired authorization_code que vous avez obtenu dans la section précédente.The authorization_code that you acquired in the previous section
redirect_uriredirect_uri requiredrequired Une redirect_uri inscrite sur l’application cliente.A redirect_uriregistered on the client application.
client_secretclient_secret requis pour les applications web, non autorisé pour les clients publicsrequired for web apps, not allowed for public clients Secret d’application que vous avez créé dans le portail Azure pour votre application sous Clés.The application secret that you created in the Azure Portal for your app under Keys. Il ne peut pas être utilisé dans une application native (client public), car les clés secrètes client ne peuvent pas être stockées de manière sûre sur les appareils.It cannot be used in a native app (public client), because client_secrets cannot be reliably stored on devices. Il est requis pour les applications web et les API Web (tous les clients confidentiels), qui peuvent stocker en toute sécurité le client_secret sur le côté serveur.It is required for web apps and web APIs (all confidential clients), which have the ability to store the client_secret securely on the server side. Le client_secret doit être codée URL avant d’être envoyée.The client_secret should be URL-encoded before being sent.
resourceresource recommandérecommended URI ID d’application de l’API web cible (ressource sécurisée).The App ID URI of the target web API (secured resource). Pour rechercher l’URI de l’ID d’application, dans le portail Azure, cliquez sur Azure Active Directory, Inscriptions des applications, ouvrez la page Paramètres de l’application, puis cliquez sur Propriétés.To find the App ID URI, in the Azure Portal, click Azure Active Directory, click Application registrations, open the application's Settings page, then click Properties. Il peut également s’agir d’une ressource externe comme https://graph.microsoft.com.It may also be an external resource like https://graph.microsoft.com. Il est nécessaire dans les requêtes de jeton ou d’autorisation.This is required in one of either the authorization or token requests. Pour réduire le nombre d’invites d’authentification, placez-le dans la requête d’autorisation afin d’être sûr que le consentement est reçu par l’utilisateur.To ensure fewer authentication prompts place it in the authorization request to ensure consent is received from the user. S’il figure à la fois dans la requête d’autorisation et dans la requête de jeton, les paramètres de la ressource doivent correspondre.If in both the authorization request and the token request, the resource` parameters must match.
code_verifiercode_verifier facultatifoptional Le même code_verifier utilisé pour obtenir le authorization_code.The same code_verifier that was used to obtain the authorization_code. Obligatoire si PKCE est utilisé dans la requête d’octroi du code d’autorisation.Required if PKCE was used in the authorization code grant request. Pour plus d'informations, consultez le RFC PKCEFor more information, see the PKCE RFC

Pour rechercher l’URI de l’ID d’application, dans le portail Azure, cliquez sur Azure Active Directory, Inscriptions des applications, ouvrez la page Paramètres de l’application, puis cliquez sur Propriétés.To find the App ID URI, in the Azure Portal, click Azure Active Directory, click Application registrations, open the application's Settings page, then click Properties.

Réponse correcteSuccessful response

Azure AD renvoie un jeton d’accès dès réception d’une réponse correcte.Azure AD returns an access token upon a successful response. Pour réduire le nombre d’appels réseau de l’application cliente et la latence associée, l’application cliente doit mettre en cache des jetons d’accès tout au long de la durée de vie des jetons, spécifiée dans la réponse OAuth 2.0.To minimize network calls from the client application and their associated latency, the client application should cache access tokens for the token lifetime that is specified in the OAuth 2.0 response. Pour déterminer la durée de vie des jetons, utilisez les valeurs de paramètre expires_in ou expires_on.To determine the token lifetime, use either the expires_in or expires_on parameter values.

Si une ressource de l’API web renvoie un code d’erreur invalid_token , cela peut indiquer que la ressource a déterminé que le jeton est arrivé à expiration.If a web API resource returns an invalid_token error code, this might indicate that the resource has determined that the token is expired. Si les temps horloge du client et de la ressource sont différents (on parle alors de « différence de temps »), la ressource peut considérer que le jeton a expiré avant que celui-ci n’ait été effacé du cache du client.If the client and resource clock times are different (known as a "time skew"), the resource might consider the token to be expired before the token is cleared from the client cache. Si cela se produit, effacez le jeton du cache, même si sa durée de vie calculée n’a pas expiré.If this occurs, clear the token from the cache, even if it is still within its calculated lifetime.

Une réponse réussie se présenterait ainsi :A successful response could look like this:

{
  "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1THdqcHdBSk9NOW4tQSJ9.eyJhdWQiOiJodHRwczovL3NlcnZpY2UuY29udG9zby5jb20vIiwiaXNzIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvN2ZlODE0NDctZGE1Ny00Mzg1LWJlY2ItNmRlNTdmMjE0NzdlLyIsImlhdCI6MTM4ODQ0MDg2MywibmJmIjoxMzg4NDQwODYzLCJleHAiOjEzODg0NDQ3NjMsInZlciI6IjEuMCIsInRpZCI6IjdmZTgxNDQ3LWRhNTctNDM4NS1iZWNiLTZkZTU3ZjIxNDc3ZSIsIm9pZCI6IjY4Mzg5YWUyLTYyZmEtNGIxOC05MWZlLTUzZGQxMDlkNzRmNSIsInVwbiI6ImZyYW5rbUBjb250b3NvLmNvbSIsInVuaXF1ZV9uYW1lIjoiZnJhbmttQGNvbnRvc28uY29tIiwic3ViIjoiZGVOcUlqOUlPRTlQV0pXYkhzZnRYdDJFYWJQVmwwQ2o4UUFtZWZSTFY5OCIsImZhbWlseV9uYW1lIjoiTWlsbGVyIiwiZ2l2ZW5fbmFtZSI6IkZyYW5rIiwiYXBwaWQiOiIyZDRkMTFhMi1mODE0LTQ2YTctODkwYS0yNzRhNzJhNzMwOWUiLCJhcHBpZGFjciI6IjAiLCJzY3AiOiJ1c2VyX2ltcGVyc29uYXRpb24iLCJhY3IiOiIxIn0.JZw8jC0gptZxVC-7l5sFkdnJgP3_tRjeQEPgUn28XctVe3QqmheLZw7QVZDPCyGycDWBaqy7FLpSekET_BftDkewRhyHk9FW_KeEz0ch2c3i08NGNDbr6XYGVayNuSesYk5Aw_p3ICRlUV1bqEwk-Jkzs9EEkQg4hbefqJS6yS1HoV_2EsEhpd_wCQpxK89WPs3hLYZETRJtG5kvCCEOvSHXmDE6eTHGTnEgsIk--UlPe275Dvou4gEAwLofhLDQbMSjnlV5VLsjimNBVcSRFShoxmQwBJR_b2011Y5IuD6St5zPnzruBbZYkGNurQK63TJPWmRd3mbJsGM0mf3CUQ",
  "token_type": "Bearer",
  "expires_in": "3600",
  "expires_on": "1388444763",
  "resource": "https://service.contoso.com/",
  "refresh_token": "AwABAAAAvPM1KaPlrEqdFSBzjqfTGAMxZGUTdM0t4B4rTfgV29ghDOHRc2B-C_hHeJaJICqjZ3mY2b_YNqmf9SoAylD1PycGCB90xzZeEDg6oBzOIPfYsbDWNf621pKo2Q3GGTHYlmNfwoc-OlrxK69hkha2CF12azM_NYhgO668yfcUl4VBbiSHZyd1NVZG5QTIOcbObu3qnLutbpadZGAxqjIbMkQ2bQS09fTrjMBtDE3D6kSMIodpCecoANon9b0LATkpitimVCrl-NyfN3oyG4ZCWu18M9-vEou4Sq-1oMDzExgAf61noxzkNiaTecM-Ve5cq6wHqYQjfV9DOz4lbceuYCAA",
  "scope": "https%3A%2F%2Fgraph.microsoft.com%2Fmail.read",
  "id_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJhdWQiOiIyZDRkMTFhMi1mODE0LTQ2YTctODkwYS0yNzRhNzJhNzMwOWUiLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC83ZmU4MTQ0Ny1kYTU3LTQzODUtYmVjYi02ZGU1N2YyMTQ3N2UvIiwiaWF0IjoxMzg4NDQwODYzLCJuYmYiOjEzODg0NDA4NjMsImV4cCI6MTM4ODQ0NDc2MywidmVyIjoiMS4wIiwidGlkIjoiN2ZlODE0NDctZGE1Ny00Mzg1LWJlY2ItNmRlNTdmMjE0NzdlIiwib2lkIjoiNjgzODlhZTItNjJmYS00YjE4LTkxZmUtNTNkZDEwOWQ3NGY1IiwidXBuIjoiZnJhbmttQGNvbnRvc28uY29tIiwidW5pcXVlX25hbWUiOiJmcmFua21AY29udG9zby5jb20iLCJzdWIiOiJKV3ZZZENXUGhobHBTMVpzZjd5WVV4U2hVd3RVbTV5elBtd18talgzZkhZIiwiZmFtaWx5X25hbWUiOiJNaWxsZXIiLCJnaXZlbl9uYW1lIjoiRnJhbmsifQ."
}

ParamètreParameter DescriptionDescription
access_tokenaccess_token Le jeton d’accès demandé.The requested access token. Il s’agit d’une chaîne opaque, qui dépend de ce que la ressource s’attend à recevoir, et elle n’est pas destinée à être examinée par le client.This is an opaque string - it depends on what the resource expects to receive, and is not intended for the client to look at. L’application peut utiliser ce jeton pour procéder à l’authentification sur la ressource sécurisée, comme une API Web.The app can use this token to authenticate to the secured resource, such as a web API.
token_typetoken_type Indique la valeur du type de jeton.Indicates the token type value. Le seul type de jeton pris en charge par Azure AD est le jeton porteur.The only type that Azure AD supports is Bearer. Pour plus d’informations sur les jetons du porteur, consultez le Framework d’autorisation OAuth 2.0 : Utilisation de jetons du porteur (RFC 6750).For more information about Bearer tokens, see OAuth2.0 Authorization Framework: Bearer Token Usage (RFC 6750)
expires_inexpires_in La durée de validité (en secondes) du jeton d’accès.How long the access token is valid (in seconds).
expires_onexpires_on L’heure d’expiration du jeton d’accès.The time when the access token expires. La date est représentée en nombre de secondes à partir du 1er janvier 1970 (1970-01-01T0:0:0Z) UTC jusqu’au moment de l’expiration.The date is represented as the number of seconds from 1970-01-01T0:0:0Z UTC until the expiration time. Cette valeur est utilisée pour déterminer la durée de vie des jetons en cache.This value is used to determine the lifetime of cached tokens.
resourceresource URI ID d’application de l’API web (ressource sécurisée).The App ID URI of the web API (secured resource).
scopescope Autorisations d’emprunt d’identité accordées à l’application cliente.Impersonation permissions granted to the client application. L’autorisation par défaut est user_impersonation.The default permission is user_impersonation. Le propriétaire de la ressource sécurisée peut enregistrer des valeurs supplémentaires dans Azure AD.The owner of the secured resource can register additional values in Azure AD.
refresh_tokenrefresh_token Un jeton d’actualisation OAuth 2.0.An OAuth 2.0 refresh token. L’application peut utiliser ce jeton pour acquérir des jetons d’accès supplémentaires après l’expiration du jeton d’accès actuel.The app can use this token to acquire additional access tokens after the current access token expires. Les jetons d’actualisation sont durables, et peuvent être utilisés pour conserver l’accès aux ressources pendant des périodes prolongées.Refresh tokens are long-lived, and can be used to retain access to resources for extended periods of time.
id_tokenid_token Un JSON Web Token (JWT) non signé qui représente un jeton d’ID.An unsigned JSON Web Token (JWT) representing an ID token. L’application peut décoder les segments de ce jeton à l’aide d’un décodeur base64Url afin de demander des informations relatives à l’utilisateur qui s’est connecté.The app can base64Url decode the segments of this token to request information about the user who signed in. L’application peut mettre en cache les valeurs et les afficher, mais ne peut aucunement les utiliser pour les limites d’autorisation ou de sécurité.The app can cache the values and display them, but it should not rely on them for any authorization or security boundaries.

Pour plus d’informations sur les jetons web JSON, consultez le projet de spécification JWT de l’IETF.For more information about JSON web tokens, see the JWT IETF draft specification. Pour en savoir plus sur id_tokens, consultez le flux OpenID Connect v1.0.To learn more about id_tokens, see the v1.0 OpenID Connect flow.

Réponse d’erreurError response

Les erreurs de point de terminaison d’émission de jeton sont des codes d’erreur HTTP, étant donné que le client appelle directement le point de terminaison d’émission de jeton.The token issuance endpoint errors are HTTP error codes, because the client calls the token issuance endpoint directly. Outre le code d’état HTTP, le point de terminaison d’émission de jeton Azure AD retourne également un document JSON avec des objets qui décrivent l’erreur.In addition to the HTTP status code, the Azure AD token issuance endpoint also returns a JSON document with objects that describe the error.

Une réponse d’erreur se présenterait ainsi :A sample error response could look like this:

{
  "error": "invalid_grant",
  "error_description": "AADSTS70002: Error validating credentials. AADSTS70008: The provided authorization code or refresh token is expired. Send a new interactive authorization request for this user and resource.\r\nTrace ID: 3939d04c-d7ba-42bf-9cb7-1e5854cdce9e\r\nCorrelation ID: a8125194-2dc8-4078-90ba-7b6592a7f231\r\nTimestamp: 2016-04-11 18:00:12Z",
  "error_codes": [
    70002,
    70008
  ],
  "timestamp": "2016-04-11 18:00:12Z",
  "trace_id": "3939d04c-d7ba-42bf-9cb7-1e5854cdce9e",
  "correlation_id": "a8125194-2dc8-4078-90ba-7b6592a7f231"
}
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.
error_codeserror_codes Liste des codes d’erreur STS spécifiques pouvant être utiles dans les tests de diagnostic.A list of STS-specific error codes that can help in diagnostics.
timestamptimestamp Heure à laquelle l’erreur s’est produite.The time at which the error occurred.
trace_idtrace_id Identifiant unique de la demande pouvant être utile dans les tests de diagnostic.A unique identifier for the request that can help in diagnostics.
correlation_idcorrelation_id Identifiant unique de la demande pouvant être utile dans les tests de diagnostic sur les divers composants.A unique identifier for the request that can help in diagnostics across components.

Codes d’état HTTPHTTP status codes

Le tableau suivant répertorie les codes d’état HTTP retournés par le point de terminaison d’émission de jeton.The following table lists the HTTP status codes that the token issuance endpoint returns. Dans certains cas, le code d’erreur est suffisant pour décrire la réponse, mais en cas d’erreurs, vous devez analyser le document JSON joint et examiner son code d’erreur.In some cases, the error code is sufficient to describe the response, but if there are errors, you need to parse the accompanying JSON document and examine its error code.

Code HTTPHTTP Code DescriptionDescription
400400 Code HTTP par défaut.Default HTTP code. Il est utilisé dans la plupart des cas et est généralement dû à une demande incorrecte.Used in most cases and is typically due to a malformed request. Corrigez l’erreur, puis envoyez à nouveau la demande.Fix and resubmit the request.
401401 Échec d’authentification.Authentication failed. Par exemple, la demande ne contient pas le paramètre client_secret.For example, the request is missing the client_secret parameter.
403403 Échec de l’autorisation.Authorization failed. Par exemple, l’utilisateur n’est pas autorisé à accéder à la ressource.For example, the user does not have permission to access the resource.
500500 Une erreur interne s’est produite au niveau du service.An internal error has occurred at the service. relancez la requête.Retry the request.

Codes d’erreur pour les erreurs de point de terminaison de jetonError codes for token endpoint errors

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
invalid_grantinvalid_grant Le code d’autorisation n’est pas valide ou a expiré.The authorization code is invalid or has expired. Essayez une nouvelle demande sur le point de terminaison /authorizeTry a new request to the /authorize endpoint
unauthorized_clientunauthorized_client Le client authentifié n’est pas autorisé à utiliser ce type d’octroi d’autorisation.The authenticated client is not authorized to use this authorization grant type. 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.
invalid_clientinvalid_client Échec d’authentification du client.Client authentication failed. Les informations d’identification du client ne sont pas valides.The client credentials are not valid. Pour résoudre le problème, l’administrateur de l’application met à jour les informations d’identification.To fix, the application administrator updates the credentials.
unsupported_grant_typeunsupported_grant_type Le serveur d’autorisation ne prend pas en charge le type d’octroi d’autorisation.The authorization server does not support the authorization grant type. Modifiez le type d’octroi dans la demande.Change the grant type in the request. Ce type d’erreur doit se produire uniquement lors du développement et doit être détecté lors du test initial.This type of error should occur only during development and be detected during initial testing.
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.
interaction_requiredinteraction_required La demande nécessite une interaction utilisateur.The request requires user interaction. Par exemple, une étape d’authentification supplémentaire est nécessaire.For example, an additional authentication step is required. Au lieu d’une demande non interactive, réessayez avec une demande d’autorisation interactive pour la même ressource.Instead of a non-interactive request, retry with an interactive authorization request for the same resource.
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.

Utiliser le jeton d’accès pour accéder à la ressourceUse the access token to access the resource

Maintenant que vous avez acquis un jeton access_token, vous pouvez l'utiliser dans des requêtes dirigées vers des API Web en l'incluant dans l'en-tête Authorization.Now that you've successfully acquired an access_token, you can use the token in requests to Web APIs, by including it in the Authorization header. La spécification RFC 6750 explique comment utiliser des jetons du porteur dans les requêtes HTTP pour accéder aux ressources protégées.The RFC 6750 specification explains how to use bearer tokens in HTTP requests to access protected resources.

Exemple de requêteSample request

GET /data HTTP/1.1
Host: service.contoso.com
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1THdqcHdBSk9NOW4tQSJ9.eyJhdWQiOiJodHRwczovL3NlcnZpY2UuY29udG9zby5jb20vIiwiaXNzIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvN2ZlODE0NDctZGE1Ny00Mzg1LWJlY2ItNmRlNTdmMjE0NzdlLyIsImlhdCI6MTM4ODQ0MDg2MywibmJmIjoxMzg4NDQwODYzLCJleHAiOjEzODg0NDQ3NjMsInZlciI6IjEuMCIsInRpZCI6IjdmZTgxNDQ3LWRhNTctNDM4NS1iZWNiLTZkZTU3ZjIxNDc3ZSIsIm9pZCI6IjY4Mzg5YWUyLTYyZmEtNGIxOC05MWZlLTUzZGQxMDlkNzRmNSIsInVwbiI6ImZyYW5rbUBjb250b3NvLmNvbSIsInVuaXF1ZV9uYW1lIjoiZnJhbmttQGNvbnRvc28uY29tIiwic3ViIjoiZGVOcUlqOUlPRTlQV0pXYkhzZnRYdDJFYWJQVmwwQ2o4UUFtZWZSTFY5OCIsImZhbWlseV9uYW1lIjoiTWlsbGVyIiwiZ2l2ZW5fbmFtZSI6IkZyYW5rIiwiYXBwaWQiOiIyZDRkMTFhMi1mODE0LTQ2YTctODkwYS0yNzRhNzJhNzMwOWUiLCJhcHBpZGFjciI6IjAiLCJzY3AiOiJ1c2VyX2ltcGVyc29uYXRpb24iLCJhY3IiOiIxIn0.JZw8jC0gptZxVC-7l5sFkdnJgP3_tRjeQEPgUn28XctVe3QqmheLZw7QVZDPCyGycDWBaqy7FLpSekET_BftDkewRhyHk9FW_KeEz0ch2c3i08NGNDbr6XYGVayNuSesYk5Aw_p3ICRlUV1bqEwk-Jkzs9EEkQg4hbefqJS6yS1HoV_2EsEhpd_wCQpxK89WPs3hLYZETRJtG5kvCCEOvSHXmDE6eTHGTnEgsIk--UlPe275Dvou4gEAwLofhLDQbMSjnlV5VLsjimNBVcSRFShoxmQwBJR_b2011Y5IuD6St5zPnzruBbZYkGNurQK63TJPWmRd3mbJsGM0mf3CUQ

Réponse d’erreurError Response

Les ressources sécurisées qui implémentent la spécification RFC 6750 émettent des codes d’état HTTP.Secured resources that implement RFC 6750 issue HTTP status codes. Si la demande n’inclut pas d’informations d’authentification ou ne contient pas le jeton, la réponse inclut un en-tête WWW-Authenticate .If the request does not include authentication credentials or is missing the token, the response includes an WWW-Authenticate header. Lorsqu’une requête échoue, le serveur de ressources répond avec un code d’état HTTP et un code d’erreur.When a request fails, the resource server responds with the HTTP status code and an error code.

Voici un exemple de réponse qui échoue lorsque la demande du client n’inclut pas le jeton du porteur :The following is an example of an unsuccessful response when the client request does not include the bearer token:

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer authorization_uri="https://login.microsoftonline.com/contoso.com/oauth2/authorize",  error="invalid_token",  error_description="The access token is missing.",

Paramètres d’erreurError parameters

ParamètreParameter DescriptionDescription
authorization_uriauthorization_uri L’URI (point de terminaison physique) du serveur d’autorisation.The URI (physical endpoint) of the authorization server. Cette valeur est également utilisée comme clé de recherche pour obtenir plus d’informations sur le serveur à partir d’un point de terminaison de détection.This value is also used as a lookup key to get more information about the server from a discovery endpoint.

Le client doit valider l’approbation du serveur d’autorisation.The client must validate that the authorization server is trusted. Lorsque la ressource est protégée par Azure AD, il suffit de vérifier que l’URL commence par https://login.microsoftonline.com ou un autre nom d’hôte pris en charge par Azure AD.When the resource is protected by Azure AD, it is sufficient to verify that the URL begins with https://login.microsoftonline.com or another hostname that Azure AD supports. Une ressource spécifique au client doit toujours retourner un URI d’autorisation spécifique au client.A tenant-specific resource should always return a tenant-specific authorization URI.

errorerror Une valeur de code d’erreur définie dans la section 5.2 du document OAuth 2.0 Authorization Framework(Infrastructure d’autorisation OAuth 2.0).An error code value defined in Section 5.2 of the OAuth 2.0 Authorization Framework.
error_descriptionerror_description Une description plus détaillée de l’erreur.A more detailed description of the error. Ce message n’est pas destiné à offrir une description claire à l’utilisateur final.This message is not intended to be end-user friendly.
resource_idresource_id Retourne l’identificateur unique de la ressource.Returns the unique identifier of the resource. L’application cliente peut utiliser cet identificateur en tant que valeur du paramètre resource lorsqu’elle demande un jeton pour la ressource.The client application can use this identifier as the value of the resource parameter when it requests a token for the resource.

Il est important pour l’application cliente de vérifier cette valeur. Sinon, un service malveillant peut être en mesure de provoquer une attaque par élévation de privilègesIt is important for the client application to verify this value, otherwise a malicious service might be able to induce an elevation-of-privileges attack

La stratégie recommandée pour empêcher une attaque consiste à vérifier que le paramètre resource_id correspond à la base de l’URL de l’API web faisant l’objet de l’accès.The recommended strategy for preventing an attack is to verify that the resource_id matches the base of the web API URL that being accessed. Par exemple, si https://service.contoso.com/data fait l’objet d’un accès, resource_id peut être https://service.contoso.com/.For example, if https://service.contoso.com/data is being accessed, the resource_id can be https://service.contoso.com/. L’application cliente doit rejeter un resource_id qui ne commence pas par l’URL de base sauf s’il existe une autre façon fiable de vérifier l’ID.The client application must reject a resource_id that does not begin with the base URL unless there is a reliable alternate way to verify the id.

Codes d’erreur du schéma de porteurBearer scheme error codes

La spécification RFC 6750 définit les erreurs suivantes pour les ressources qui utilisent l’en-tête WWW-Authenticate et le schéma de porteur dans la réponse.The RFC 6750 specification defines the following errors for resources that use the WWW-Authenticate header and Bearer scheme in the response.

Code d’état HTTPHTTP Status Code Code d'erreurError Code DescriptionDescription Action du clientClient Action
400400 invalid_requestinvalid_request La demande n’est pas correcte.The request is not well-formed. Par exemple, un paramètre est manquant ou elle utilise deux fois le même paramètre.For example, it might be missing a parameter or using the same parameter twice. Corrigez l’erreur et relancez la demande.Fix the error and retry the request. Ce type d’erreur doit se produire uniquement lors du développement et doit être détecté lors du test initial.This type of error should occur only during development and be detected in initial testing.
401401 invalid_tokeninvalid_token Le jeton d’accès est manquant, non valide ou révoqué.The access token is missing, invalid, or is revoked. La valeur du paramètre error_description fournit des détails supplémentaires.The value of the error_description parameter provides additional detail. Demandez un nouveau jeton auprès du serveur d’autorisation.Request a new token from the authorization server. Si le nouveau jeton échoue, une erreur inattendue s’est produite.If the new token fails, an unexpected error has occurred. Envoyez un message d’erreur à l’utilisateur et effectuez une nouvelle tentative après un délai aléatoire.Send an error message to the user and retry after random delays.
403403 insufficient_scopeinsufficient_scope Le jeton d’accès ne contient pas les autorisations d’emprunt d’identité requises pour accéder à la ressource.The access token does not contain the impersonation permissions required to access the resource. Envoyez une nouvelle demande d’autorisation au point de terminaison d’autorisation.Send a new authorization request to the authorization endpoint. Si la réponse contient le paramètre d’étendue, utilisez la valeur d’étendue dans la demande à la ressource.If the response contains the scope parameter, use the scope value in the request to the resource.
403403 insufficient_accessinsufficient_access Le sujet du jeton n’a pas les autorisations requises pour accéder à la ressource.The subject of the token does not have the permissions that are required to access the resource. Invitez l’utilisateur à utiliser un compte différent ou à demander des autorisations pour la ressource spécifiée.Prompt the user to use a different account or to request permissions to the specified resource.

Actualisation des jetons d’accèsRefreshing the access tokens

Les jetons d’accès présentent une durée de vie courte. Après leur expiration, vous devez les actualiser afin de pouvoir continuer à accéder aux ressources.Access Tokens are short-lived and must be refreshed after they expire to continue accessing resources. Pour actualiser le access_token, envoyez une nouvelle requête POST au point de terminaison /token en fournissant l’élément refresh_token au lieu de l’élément code.You can refresh the access_token by submitting another POST request to the /token endpoint, but this time providing the refresh_token instead of the code. Les jetons d’actualisation sont valides pour toutes les ressources dont l’accès a déjà été accordé par votre client. Par conséquent, un jeton d’actualisation émis pour une demande de resource=https://graph.microsoft.com peut être utilisé pour demander un nouveau jeton d’accès pour resource=https://contoso.com/api.Refresh tokens are valid for all resources that your client has already been given consent to access - thus, a refresh token issued on a request for resource=https://graph.microsoft.com can be used to request a new access token for resource=https://contoso.com/api.

Les jetons d’actualisation n’ont pas de durée de vie spécifiée.Refresh tokens do not have specified lifetimes. En règle générale, leur durée de vie est relativement longue.Typically, the lifetimes of refresh tokens are relatively long. Toutefois, dans certains cas, les jetons d’actualisation expirent, sont révoqués ou ne disposent pas de privilèges suffisants pour l’action souhaitée.However, in some cases, refresh tokens expire, are revoked, or lack sufficient privileges for the desired action. Votre application doit envisager et gérer correctement les erreurs retournées par le point de terminaison d’émission de jeton.Your application needs to expect and handle errors returned by the token issuance endpoint correctly.

Lorsque vous recevez une réponse avec une erreur de jeton d’actualisation, ignorez le jeton d’actualisation actuel et demandez un nouveau code d’autorisation ou un nouveau jeton d’accès.When you receive a response with a refresh token error, discard the current refresh token and request a new authorization code or access token. C’est particulièrement le cas lorsque vous utilisez un jeton d’actualisation dans le flux d’octroi de code d’autorisation : si vous recevez une réponse avec le code d’erreur interaction_required ou invalid_grant, ignorez le jeton d’actualisation et demandez un nouveau code d’autorisation.In particular, when using a refresh token in the Authorization Code Grant flow, if you receive a response with the interaction_required or invalid_grant error codes, discard the refresh token and request a new authorization code.

Voici un exemple de demande au point de terminaison propre au client (vous pouvez également utiliser le point de terminaison commun) pour obtenir un nouveau jeton d’accès à l’aide d’un jeton d’actualisation :A sample request to the tenant-specific endpoint (you can also use the common endpoint) to get a new access token using a refresh token looks like this:

// Line breaks for legibility only

POST /{tenant}/oauth2/token HTTP/1.1
Host: https://login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded

client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&refresh_token=OAAABAAAAiL9Kn2Z27UubvWFPbm0gLWQJVzCTE9UkP3pSx1aXxUjq...
&grant_type=refresh_token
&resource=https%3A%2F%2Fservice.contoso.com%2F
&client_secret=JqQX2PNo9bpM0uEihUPzyrh    // NOTE: Only required for web apps

Réponse correcteSuccessful response

Une réponse de jeton réussie se présente ainsi :A successful token response will look like:

{
  "token_type": "Bearer",
  "expires_in": "3600",
  "expires_on": "1460404526",
  "resource": "https://service.contoso.com/",
  "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1THdqcHdBSk9NOW4tQSJ9.eyJhdWQiOiJodHRwczovL3NlcnZpY2UuY29udG9zby5jb20vIiwiaXNzIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvN2ZlODE0NDctZGE1Ny00Mzg1LWJlY2ItNmRlNTdmMjE0NzdlLyIsImlhdCI6MTM4ODQ0MDg2MywibmJmIjoxMzg4NDQwODYzLCJleHAiOjEzODg0NDQ3NjMsInZlciI6IjEuMCIsInRpZCI6IjdmZTgxNDQ3LWRhNTctNDM4NS1iZWNiLTZkZTU3ZjIxNDc3ZSIsIm9pZCI6IjY4Mzg5YWUyLTYyZmEtNGIxOC05MWZlLTUzZGQxMDlkNzRmNSIsInVwbiI6ImZyYW5rbUBjb250b3NvLmNvbSIsInVuaXF1ZV9uYW1lIjoiZnJhbmttQGNvbnRvc28uY29tIiwic3ViIjoiZGVOcUlqOUlPRTlQV0pXYkhzZnRYdDJFYWJQVmwwQ2o4UUFtZWZSTFY5OCIsImZhbWlseV9uYW1lIjoiTWlsbGVyIiwiZ2l2ZW5fbmFtZSI6IkZyYW5rIiwiYXBwaWQiOiIyZDRkMTFhMi1mODE0LTQ2YTctODkwYS0yNzRhNzJhNzMwOWUiLCJhcHBpZGFjciI6IjAiLCJzY3AiOiJ1c2VyX2ltcGVyc29uYXRpb24iLCJhY3IiOiIxIn0.JZw8jC0gptZxVC-7l5sFkdnJgP3_tRjeQEPgUn28XctVe3QqmheLZw7QVZDPCyGycDWBaqy7FLpSekET_BftDkewRhyHk9FW_KeEz0ch2c3i08NGNDbr6XYGVayNuSesYk5Aw_p3ICRlUV1bqEwk-Jkzs9EEkQg4hbefqJS6yS1HoV_2EsEhpd_wCQpxK89WPs3hLYZETRJtG5kvCCEOvSHXmDE6eTHGTnEgsIk--UlPe275Dvou4gEAwLofhLDQbMSjnlV5VLsjimNBVcSRFShoxmQwBJR_b2011Y5IuD6St5zPnzruBbZYkGNurQK63TJPWmRd3mbJsGM0mf3CUQ",
  "refresh_token": "AwABAAAAv YNqmf9SoAylD1PycGCB90xzZeEDg6oBzOIPfYsbDWNf621pKo2Q3GGTHYlmNfwoc-OlrxK69hkha2CF12azM_NYhgO668yfcUl4VBbiSHZyd1NVZG5QTIOcbObu3qnLutbpadZGAxqjIbMkQ2bQS09fTrjMBtDE3D6kSMIodpCecoANon9b0LATkpitimVCrl PM1KaPlrEqdFSBzjqfTGAMxZGUTdM0t4B4rTfgV29ghDOHRc2B-C_hHeJaJICqjZ3mY2b_YNqmf9SoAylD1PycGCB90xzZeEDg6oBzOIPfYsbDWNf621pKo2Q3GGTHYlmNfwoc-OlrxK69hkha2CF12azM_NYhgO668yfmVCrl-NyfN3oyG4ZCWu18M9-vEou4Sq-1oMDzExgAf61noxzkNiaTecM-Ve5cq6wHqYQjfV9DOz4lbceuYCAA"
}
ParamètreParameter DescriptionDescription
token_typetoken_type Le type de jeton.The token type. La seule valeur prise en charge est bearer.The only supported value is bearer.
expires_inexpires_in La durée de vie restante du jeton en secondes.The remaining lifetime of the token in seconds. 3600 (une heure) est une valeur courante.A typical value is 3600 (one hour).
expires_onexpires_on La date et l’heure auxquelles le jeton expire.The date and time on which the token expires. La date est représentée en nombre de secondes à partir du 1er janvier 1970 (1970-01-01T0:0:0Z) UTC jusqu’au moment de l’expiration.The date is represented as the number of seconds from 1970-01-01T0:0:0Z UTC until the expiration time.
resourceresource Identifie la ressource sécurisée accessible à l’aide du jeton d’accès.Identifies the secured resource that the access token can be used to access.
scopescope Autorisations d’emprunt d’identité accordées à l’application cliente native.Impersonation permissions granted to the native client application. L’autorisation par défaut est user_impersonation.The default permission is user_impersonation. Le propriétaire de la ressource cible peut enregistrer des valeurs alternatives dans Azure AD.The owner of the target resource can register alternate values in Azure AD.
access_tokenaccess_token Le nouveau jeton d’accès qui a été demandé.The new access token that was requested.
refresh_tokenrefresh_token Un nouveau jeton d’actualisation OAuth 2.0 pouvant être utilisé pour demander de nouveaux jetons d’accès lorsque celui de cette réponse expire.A new OAuth 2.0 refresh_token that can be used to request new access tokens when the one in this response expires.

Réponse d’erreurError response

Une réponse d’erreur se présenterait ainsi :A sample error response could look like this:

{
  "error": "invalid_resource",
  "error_description": "AADSTS50001: The application named https://foo.microsoft.com/mail.read was not found in the tenant named 295e01fc-0c56-4ac3-ac57-5d0ed568f872. This can happen if the application has not been installed by the administrator of the tenant or consented to by any user in the tenant. You might have sent your authentication request to the wrong tenant.\r\nTrace ID: ef1f89f6-a14f-49de-9868-61bd4072f0a9\r\nCorrelation ID: b6908274-2c58-4e91-aea9-1f6b9c99347c\r\nTimestamp: 2016-04-11 18:59:01Z",
  "error_codes": [
    50001
  ],
  "timestamp": "2016-04-11 18:59:01Z",
  "trace_id": "ef1f89f6-a14f-49de-9868-61bd4072f0a9",
  "correlation_id": "b6908274-2c58-4e91-aea9-1f6b9c99347c"
}
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.
error_codeserror_codes Liste des codes d’erreur STS spécifiques pouvant être utiles dans les tests de diagnostic.A list of STS-specific error codes that can help in diagnostics.
timestamptimestamp Heure à laquelle l’erreur s’est produite.The time at which the error occurred.
trace_idtrace_id Identifiant unique de la demande pouvant être utile dans les tests de diagnostic.A unique identifier for the request that can help in diagnostics.
correlation_idcorrelation_id Identifiant unique de la demande pouvant être utile dans les tests de diagnostic sur les divers composants.A unique identifier for the request that can help in diagnostics across components.

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

Étapes suivantesNext steps

Pour en savoir plus sur le point de terminaison Azure AD v1.0 ainsi que sur l’ajout de l’authentification et de l’autorisation à vos applications web et API web, consultez Exemples d’applications.To learn more about the Azure AD v1.0 endpoint and how to add authentication and authorization to your web applications and web APIs, see sample applications.