Partager via


Autoriser l’accès aux applications web Azure Active Directory à l’aide du flux d’octroi de code OAuth 2.0

Avertissement

Ce contenu concerne l’ancien point de terminaison Azure AD v1.0. Utilisez la Plateforme d’identités Microsoft pour les nouveaux projets.

Remarque

Si vous n’indiquez pas au serveur quelle ressource vous envisagez d’appeler, le serveur ne déclenche pas les stratégies d’accès conditionnel pour cette ressource. Par conséquent, pour que le déclencheur MFA soit activé, vous devez inclure une ressource dans votre 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 locataire Azure AD. Ce guide est indépendant du langage et décrit comment envoyer et recevoir des messages HTTP sans utiliser nos bibliothèques open source.

Le flux de code d’autorisation OAuth 2.0 est décrit dans la section 4.1 des spécifications OAuth 2.0. Il est utilisé pour effectuer l’authentification et l’autorisation dans la plupart des types d’applications, notamment les applications web et les applications installées en mode natif.

Enregistrez votre application auprès de votre locataire Azure AD

Tout d’abord, inscrivez votre application auprès de votre locataire Azure Active Directory (Azure AD). Cela vous donnera un identifiant d'application pour votre application, et lui permettra de recevoir des jetons.

  1. Connectez-vous au portail Azure.

  2. Choisissez votre locataire Azure AD en sélectionnant votre compte dans le coin supérieur droit de la page, puis en sélectionnant la navigation dans le répertoire switch , puis en sélectionnant le locataire approprié.

    • Ignorez cette étape si vous n’avez qu’un seul locataire Azure AD sous votre compte ou si vous avez déjà sélectionné le locataire Azure AD approprié.
  3. Dans le portail Azure, recherchez et sélectionnez Azure Active Directory.

  4. Dans le menu de gauche d’Azure Active Directory , sélectionnez Inscriptions d’applications, puis Nouvelle inscription.

  5. Suivez les instructions et créez une nouvelle application. Il n’est pas important qu’il s’agisse d’une application web ou d’une application cliente publique (mobile et bureau) pour ce didacticiel, mais si vous souhaitez des exemples spécifiques pour les applications web ou les applications clientes publiques, consultez nos guides de démarrage rapide.

    • Le nom est le nom de l’application et décrit votre application aux utilisateurs finaux.
    • Sous Types de comptes pris en charge, sélectionnez Comptes dans un annuaire organisationnel et comptes personnels Microsoft.
    • Fournissez l’URI de redirection. Pour les applications web, il s’agit de l’URL de base de votre application où les utilisateurs peuvent se connecter. Par exemple : http://localhost:12345. Pour le client public (mobile &desktop), Azure AD l’utilise pour retourner des réponses de jeton. Entrez une valeur spécifique à votre application. Par exemple : http://MyFirstAADApp.
  6. Une fois l’inscription terminée, Azure AD affecte à votre application un identificateur client unique ( ID d’application). Vous avez besoin de cette valeur dans les sections suivantes. Copiez-la donc à partir de la page de l’application.

  7. Pour rechercher votre application dans le portail Azure, sélectionnez Inscriptions d’applications, puis Affichez toutes les applications.

Flux d’autorisation OAuth 2.0

À un niveau élevé, l’ensemble du flux d’autorisation d’une application ressemble un peu à ceci :

Flux de code d’authentification OAuth

Demander un code d’autorisation

Le flux de code d'autorisation commence par le client dirigeant l'utilisateur vers le point de terminaison /authorize . Dans cette demande, le client indique les autorisations dont il a besoin pour acquérir auprès de l’utilisateur. Vous pouvez obtenir le point de terminaison d’autorisation OAuth 2.0 pour votre locataire en sélectionnant Inscriptions d’applications Endpoints sur le portail Azure.

// 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ètre Catégorie Description
locataire Obligatoire 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. Les valeurs autorisées sont des identificateurs de locataire, par exemple 8eaef023-2b34-4da1-9baa-8bc8c9d6a490 , ou contoso.onmicrosoft.comcommon pour des jetons indépendants du locataire
client_id Obligatoire ID d’application affecté à votre application lorsque vous l’avez inscrite auprès d’Azure AD. Vous pouvez le trouver dans le portail Azure. Cliquez sur Azure Active Directory dans la barre latérale des services, cliquez sur Inscriptions d’applications, puis choisissez l’application.
type_de_réponse Obligatoire Doit inclure code pour le flux de code d’autorisation.
redirect_uri recommandé "redirect_uri" de votre application, où les réponses d’authentification peuvent être envoyées et reçues par votre application. Elle doit correspondre exactement à l’une des redirect_uris que vous avez inscrites dans le portail, sauf qu’elle doit être encodée par URL. Pour les applications natives et mobiles, vous devez utiliser la valeur par défaut de https://login.microsoftonline.com/common/oauth2/nativeclient.
mode_de_réponse optionnel Spécifie la méthode à utiliser pour renvoyer le jeton résultant à votre application. Peut être query, fragment ou form_post. query fournit le code en tant que paramètre de chaîne de requête sur votre URI de redirection. Si vous demandez un jeton d’ID à l’aide du flux implicite, vous ne pouvez pas utiliser query comme spécifié dans la spécification OpenID. Si vous demandez simplement le code, vous pouvez utiliser query, fragmentou form_post. form_post exécute une requête POST contenant le code pour votre URI de redirection. La valeur par défaut est query pour un flux de code.
état recommandé Une valeur incluse dans la requête qui est également renvoyée dans la réponse du jeton. 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. 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é.
ressource recommandé URI d’ID d’application de l’API web cible (ressource sécurisée). Pour rechercher l’URI d’ID d’application, dans le portail Azure, cliquez sur Azure Active Directory, sur Inscriptions d’applications, ouvrez la page Paramètres de l’application, puis cliquez sur Propriétés. Il peut également s’agir d’une ressource externe comme https://graph.microsoft.com. Cela est requis dans l’une des demandes d’autorisation ou de jeton. Pour garantir un nombre réduit d’invites d’authentification, placez-la dans la demande d’autorisation pour vous assurer que le consentement est reçu de l’utilisateur.
portée Ignoré Pour les applications Azure AD v1, les étendues doivent être configurées statiquement dans le portail Azure sous les paramètres des applications, autorisations requises.
invite optionnel Indiquez le type d’interaction utilisateur requis.

Les valeurs valides sont les suivantes :

connexion : l’utilisateur doit être invité à se réauthentifier.

select_account : l’utilisateur est invité à sélectionner un compte, en interrompant l’authentification unique. 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 complètement.

consentement : le consentement de l’utilisateur a été accordé, mais doit être mis à jour. L’utilisateur doit être invité à donner son consentement.

admin_consent : un administrateur doit être invité à donner son consentement au nom de tous les utilisateurs de leur organisation

indice de connexion optionnel 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. Souvent, les applications utilisent ce paramètre pendant la réauthentification, ayant déjà extrait le nom d’utilisateur d’une connexion précédente à l’aide de la preferred_username revendication.
domain_hint optionnel Fournit un indice sur le locataire ou le domaine que l'utilisateur doit utiliser pour se connecter. La valeur du domain_hint est un domaine enregistré pour le locataire. Si le locataire est fédéré vers un répertoire local, AAD redirige vers le serveur de fédération de locataire spécifié.
méthode_de_défi_de_code recommandé La méthode utilisée pour encoder le code_verifier pour le paramètre code_challenge. Peut être l’un des plain ou S256. S'il est exclu, code_challenge est considéré comme texte brut si code_challenge est inclus. Azure AAD v1.0 prend en charge les deux plain et S256. Pour plus d'informations, consultez le RFC PKCE.
défi_de_code recommandé Utilisé pour sécuriser les octrois de code d’autorisation via proof key for Code Exchange (PKCE) à partir d’un client natif ou public. Obligatoire si code_challenge_method est inclus. Pour plus d'informations, consultez le RFC PKCE.

Remarque

Si l’utilisateur fait partie d’une organisation, un administrateur de l’organisation peut consentir ou refuser au nom de l’utilisateur ou autoriser l’utilisateur à donner son consentement. L’utilisateur a la possibilité de donner son consentement uniquement lorsque l’administrateur l’autorise.

À ce stade, l’utilisateur est invité à entrer ses informations d’identification et à donner son consentement aux autorisations demandées par l’application dans le portail Azure. Une fois que l’utilisateur authentifie et accorde son consentement, Azure AD envoie une réponse à votre application à l’adresse redirect_uri de votre demande avec le code.

Réponse réussie

Une réponse réussie peut ressembler à ceci :

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ètre Description
admin_consent La valeur est True si un administrateur a consenti à une invite de demande de consentement.
code Code d’autorisation demandé par l’application. L’application peut utiliser le code d’autorisation pour demander un jeton d’accès pour la ressource cible.
état de session Valeur unique qui identifie la session utilisateur active. Cette valeur est un GUID, mais elle doit être traitée comme une valeur opaque qui est passée sans examen.
état Si un paramètre d’état est inclus dans la demande, la même valeur doit apparaître dans la réponse. Il est recommandé pour l’application de vérifier que les valeurs d’état dans la requête et la réponse sont identiques avant d’utiliser la réponse. Cela permet de détecter les attaques par falsification de requête intersites (CSRF) contre le client.

Réponse d’erreur

Les réponses d’erreur peuvent également être envoyées à l’application redirect_uri afin que l’application puisse les gérer de manière appropriée.

GET http://localhost:12345/?
error=access_denied
&error_description=the+user+canceled+the+authentication
Paramètre Description
erreur Valeur de code d’erreur définie dans la section 5.2 du framework d’autorisation OAuth 2.0. Le tableau suivant décrit les codes d’erreur retournés par Azure AD.
description de l'erreur Description plus détaillée de l’erreur. Ce message n'est pas destiné à être compréhensible ou facile d'utilisation pour les utilisateurs finaux.
état La valeur d’état est une valeur non réutilisée générée de manière aléatoire qui est envoyée dans la requête et retournée dans la réponse pour empêcher les attaques par falsification de requête intersite (CSRF).

Codes d’erreur pour les erreurs de point de terminaison d’autorisation

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.

Code d’erreur Description Action du client
demande_invalide Erreur de protocole, tel qu’un paramètre obligatoire manquant. Corrigez l’erreur, puis envoyez à nouveau la demande. Il s’agit d’une erreur de développement et est généralement interceptée pendant les tests initiaux.
client_non_autorisé L’application cliente n’est pas autorisée à demander un code d’autorisation. Cela se produit généralement lorsque l’application cliente n’est pas inscrite dans Azure AD ou n’est pas ajoutée au locataire Azure AD de l’utilisateur. L’application peut inviter l’utilisateur à suivre des instructions pour installer l’application et l’ajouter à Azure AD.
accès_refusé Le propriétaire de la ressource n’a pas accordé son consentement. L’application cliente peut informer l’utilisateur qu’il ne peut pas continuer, sauf si l’utilisateur consent.
type_de_réponse_non_supporté Le serveur d’autorisation ne prend pas en charge le type de réponse dans la requête. Corrigez l’erreur, puis envoyez à nouveau la demande. Il s’agit d’une erreur de développement et est généralement interceptée pendant les tests initiaux.
erreur_serveur Le serveur a rencontré une erreur inattendue. Relancez la requête. Ces erreurs peuvent résulter de conditions temporaires. L’application cliente peut expliquer à l’utilisateur que sa réponse est retardée en raison d’une erreur temporaire.
Temporairement indisponible Le serveur est temporairement trop occupé pour traiter la demande. Relancez la requête. L’application cliente peut expliquer à l’utilisateur que sa réponse est retardée en raison d’une condition temporaire.
ressource_invalide La ressource cible n’est pas valide, car elle n’existe pas, Azure AD ne peut pas la trouver, ou elle n’est pas correctement configurée. Cela indique que la ressource, si elle existe, n’a pas été configurée dans le tenant. L’application peut inviter l’utilisateur à suivre des instructions pour installer l’application et l’ajouter à Azure AD.

Utiliser le code d’autorisation pour demander un jeton d’accès

Maintenant que vous avez acquis un code d’autorisation et que vous avez reçu l’autorisation de l’utilisateur, vous pouvez échanger le code pour un jeton d’accès à la ressource souhaitée, en envoyant une requête POST au /token point de terminaison :

// 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ètre Catégorie Description
locataire Obligatoire 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. Les valeurs autorisées sont des identificateurs de locataire, par exemple 8eaef023-2b34-4da1-9baa-8bc8c9d6a490 , ou contoso.onmicrosoft.comcommon pour des jetons indépendants du locataire
client_id Obligatoire ID d’application affecté à votre application lorsque vous l’avez inscrite auprès d’Azure AD. Vous pouvez le trouver dans le portail Azure. L’ID d’application s’affiche dans les paramètres de l’inscription de l’application.
type d'autorisation Obligatoire Doit être authorization_code pour le flux de code d'autorisation.
code Obligatoire Celui authorization_code que vous avez acquis dans la section précédente
redirect_uri Obligatoire Inscrit redirect_urisur l’application cliente.
secret du client obligatoire pour les applications web, non autorisées pour les clients publics Secret d’application que vous avez créé dans le portail Azure pour votre application sous Clés. Il ne peut pas être utilisé dans une application native (client public), car client_secrets ne peut pas être stocké de manière fiable sur les appareils. Il est nécessaire pour les applications web et les API web (tous les clients confidentiels), qui ont la possibilité de stocker de client_secret manière sécurisée côté serveur. La client_secret doit être encodée par URL avant d’être envoyée.
ressource recommandé URI d’ID d’application de l’API web cible (ressource sécurisée). Pour rechercher l’URI d’ID d’application, dans le portail Azure, cliquez sur Azure Active Directory, sur Inscriptions d’applications, ouvrez la page Paramètres de l’application, puis cliquez sur Propriétés. Il peut également s’agir d’une ressource externe comme https://graph.microsoft.com. Cela est requis dans l’une des demandes d’autorisation ou de jeton. Pour garantir un nombre réduit d’invites d’authentification, placez-la dans la demande d’autorisation pour vous assurer que le consentement est reçu de l’utilisateur. Si dans la demande d’autorisation et la demande de jeton, les paramètres de la ressource doivent correspondre.
vérificateur_de_code optionnel Le même code_verifier utilisé pour obtenir le authorization_code. Obligatoire si PKCE est utilisé dans la requête d’octroi du code d’autorisation. Pour plus d'informations, consultez le RFC PKCE

Pour rechercher l’URI d’ID d’application, dans le portail Azure, cliquez sur Azure Active Directory, sur Inscriptions d’applications, ouvrez la page Paramètres de l’application, puis cliquez sur Propriétés.

Réponse réussie

Azure AD retourne un jeton d’accès lors d’une réponse réussie. Pour réduire les appels réseau de l’application cliente et leur latence associée, l’application cliente doit mettre en cache les jetons d’accès pour la durée de vie des jetons spécifiée dans la réponse OAuth 2.0. Pour déterminer la durée de vie du jeton, utilisez les valeurs ou expires_on les valeurs de expires_in paramètre.

Si une ressource d’API web retourne un code d’erreur invalid_token , cela peut indiquer que la ressource a déterminé que le jeton a expiré. Si les heures d’horloge du client et de la ressource sont différentes (appelées « décalage horaire »), la ressource peut considérer que le jeton a expiré avant que le jeton ne soit effacé du cache du client. Si cela se produit, effacez le jeton du cache, même s’il est toujours dans sa durée de vie calculée.

Une réponse réussie peut ressembler à ceci :

{
  "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ètre Description
jeton d'accès Jeton d’accès demandé. Il s’agit d’une chaîne opaque : elle dépend de ce que la ressource s’attend à recevoir et n’est pas destinée au client à examiner. L’application peut utiliser ce jeton pour s’authentifier auprès de la ressource sécurisée, telle qu’une API web.
type_de_jeton Indique la valeur du type de jeton. Le seul type pris en charge par Azure AD est Bearer. Pour plus d’informations sur les jetons du porteur, consultez OAuth2.0 Authorization Framework : Bearer Token Usage (RFC 6750)
expires_in Durée de validité du jeton d’accès (en secondes).
expire le Heure à laquelle le jeton d’accès expire. La date est représentée sous la forme du nombre de secondes comprises entre 1970-01-01T0:0:0Z UTC jusqu’à l’heure d’expiration. Cette valeur est utilisée pour déterminer la durée de vie des jetons en cache.
ressource URI d’ID d’application de l’API web (ressource sécurisée).
portée Autorisations d’emprunt d’identité accordées à l’application cliente. L’autorisation par défaut est user_impersonation. Le propriétaire de la ressource sécurisée peut inscrire des valeurs supplémentaires dans Azure AD.
jeton_de_actualisation Un jeton d’actualisation OAuth 2.0. 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. Les jetons d’actualisation ont une longue durée de vie. Ils peuvent être utilisés pour conserver l’accès à des ressources pour une période prolongée.
Jeton d'identification (id_token) Jeton web JSON non signé (JWT) représentant un jeton d’ID. L’application peut décoder en base64Url les segments de ce jeton pour demander des informations sur l’utilisateur qui s’est connecté. L’application peut mettre en cache les valeurs et les afficher, mais elle ne doit pas s’appuyer sur elles pour les limites d’autorisation ou de sécurité.

Pour plus d’informations sur les jetons web JSON, consultez la spécification brouillon JWT IETF. Pour en savoir plus sur id_tokens, consultez le flux OpenID Connect v1.0.

Réponse d’erreur

Les erreurs de point de terminaison d’émission de jeton sont des codes d’erreur HTTP, car le client appelle directement le point de terminaison d’émission de jeton. 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.

Un exemple de réponse d’erreur peut ressembler à ceci :

{
  "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ètre Description
erreur Une chaîne de code d’erreur pouvant être utilisée pour classer les types d’erreurs se produisant, et pouvant être utilisée pour intervenir face aux erreurs.
description de l'erreur Un message d’erreur spécifique qui peut aider un développeur à identifier la cause principale d’une erreur d’authentification.
codes_erreur Liste des codes d’erreur STS spécifiques pouvant être utiles dans les tests de diagnostic.
horodatage Heure à laquelle l’erreur s’est produite.
identifiant_de_trace Identifiant unique de la demande pouvant être utile dans les tests de diagnostic.
correlation_id Identifiant unique de la demande pouvant être utile dans les tests de diagnostic sur les divers composants.

Codes d’état HTTP

Le tableau suivant répertorie les codes d’état HTTP retournés par le point de terminaison d’émission de jeton. Dans certains cas, le code d’erreur est suffisant pour décrire la réponse, mais s’il existe des erreurs, vous devez analyser le document JSON associé et examiner son code d’erreur.

HTTP Code Description
400 Code HTTP par défaut. Utilisé dans la plupart des cas et est généralement dû à une demande incorrecte. Corrigez l’erreur, puis envoyez à nouveau la demande.
401 Échec de l’authentification. Par exemple, la requête ne contient pas le paramètre client_secret.
403 Échec de l’autorisation. Par exemple, l’utilisateur n’a pas l’autorisation d’accéder à la ressource.
500 Une erreur interne s’est produite au niveau du service. Relancez la requête.

Codes d’erreur pour les erreurs de point de terminaison de jeton

Code d’erreur Description Action du client
requête_invalide Erreur de protocole, tel qu’un paramètre obligatoire manquant. Corriger et soumettre à nouveau la requête
autorisation_invalide Le code d’autorisation n’est pas valide ou a expiré. Essayer une nouvelle requête au /authorize point de terminaison
client_non_autorisé Le client authentifié n’est pas autorisé à utiliser ce type d’octroi d’autorisation. Cela se produit généralement lorsque l’application cliente n’est pas inscrite dans Azure AD ou n’est pas ajoutée au locataire Azure AD de l’utilisateur. L’application peut inviter l’utilisateur à suivre des instructions pour installer l’application et l’ajouter à Azure AD.
invalid_client Échec d’authentification du client. Les informations d’identification du client ne sont pas valides. Pour résoudre le problème, l’administrateur de l’application met à jour les informations d’identification.
type_d'autorisation_non_soutenu Le serveur d’autorisation ne prend pas en charge le type d’octroi d’autorisation. Modifiez le type d’octroi dans la demande. Ce type d’erreur doit se produire uniquement lors du développement et doit être détecté lors du test initial.
ressource_invalide La ressource cible n’est pas valide, car elle n’existe pas, Azure AD ne peut pas la trouver, ou elle n’est pas correctement configurée. Cela indique que la ressource, si elle existe, n’a pas été configurée dans le tenant. L’application peut inviter l’utilisateur à suivre des instructions pour installer l’application et l’ajouter à Azure AD.
interaction requise La demande nécessite une interaction utilisateur. Par exemple, une étape d’authentification supplémentaire est requise. Au lieu d’une requête non interactive, réessayez avec une demande d’autorisation interactive pour la même ressource.
Temporairement indisponible Le serveur est temporairement trop occupé pour traiter la demande. Relancez la requête. L’application cliente peut expliquer à l’utilisateur que sa réponse est retardée en raison d’une condition temporaire.

Utiliser le jeton d’accès pour accéder à la ressource

Maintenant que vous avez acquis un jeton access_token, vous pouvez utiliser le jeton dans les requêtes aux API Web, en l'incluant dans l'en-tête Authorization. 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.

Exemple de requête

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’erreur

Les ressources sécurisées qui implémentent RFC 6750 émettent des codes d’état HTTP. Si la demande n’inclut pas d’informations d’identification d’authentification ou ne contient pas le jeton, la réponse inclut un WWW-Authenticate en-tête. Lorsqu’une requête échoue, le serveur de ressources répond avec le code d’état HTTP et un code d’erreur.

Voici un exemple de réponse échouée lorsque la requête client n'inclut pas le jeton de porteur :

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’erreur

Paramètre Description
authorization_uri URI (point de terminaison physique) du serveur d’autorisation. 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écouverte.

Le client doit vérifier que le serveur d’autorisation est approuvé. 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. Une ressource spécifique au locataire doit toujours retourner un URI d’autorisation spécifique au locataire.

erreur Valeur de code d’erreur définie dans la section 5.2 du framework d’autorisation OAuth 2.0.
description de l'erreur Description plus détaillée de l’erreur. Ce message n’est pas destiné à être convivial.
resource_id Retourne l’identificateur unique de la ressource. L’application cliente peut utiliser cet identificateur comme valeur du resource paramètre lorsqu’elle demande un jeton pour la ressource.

Il est important pour l’application cliente de vérifier cette valeur, sinon un service malveillant peut être en mesure d’induire une attaque d’élévation de privilèges

La stratégie recommandée pour empêcher une attaque consiste à vérifier que le resource_id correspond à la base de l’URL de l’API web à laquelle on accède. Par exemple, si https://service.contoso.com/data est consulté, le resource_id peut être https://service.contoso.com/. L’application cliente doit rejeter un resource_id élément qui ne commence pas par l’URL de base, sauf s’il existe un autre moyen fiable de vérifier l’ID.

Codes d'erreur du schéma d'authentification du porteur

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 Bearer dans la réponse.

Code d’état HTTP Code d’erreur Description Action du client
400 requête_invalide La demande n’est pas bien formée. Par exemple, il peut manquer un paramètre ou utiliser le même paramètre deux fois. Corrigez l’erreur et réessayez la requête. Ce type d’erreur doit se produire uniquement pendant le développement et être détecté lors des tests initiaux.
401 invalid_token Le jeton d’accès est manquant, non valide ou est révoqué. La valeur du paramètre error_description fournit des détails supplémentaires. Demandez un nouveau jeton auprès du serveur d’autorisation. Si le nouveau jeton échoue, une erreur inattendue s’est produite. Envoyez un message d’erreur à l’utilisateur et réessayez après des retards aléatoires.
403 portée insuffisante Le jeton d’accès ne contient pas les autorisations de simulation d'identité requises pour accéder à la ressource. Envoyez une nouvelle demande d’autorisation au point de terminaison d’autorisation. Si la réponse contient le paramètre d’étendue, utilisez la valeur d’étendue dans la demande à la ressource.
403 accès insuffisant L’objet du jeton ne dispose pas des autorisations requises pour accéder à la ressource. Invitez l’utilisateur à utiliser un autre compte ou à demander des autorisations à la ressource spécifiée.

Actualisation des jetons d’accès

Les jetons d’accès sont de courte durée et doivent être actualisés après leur expiration pour continuer à accéder aux ressources. Vous pouvez actualiser le access_token en envoyant une autre POST demande à l'endpoint /token, mais cette fois-ci, en fournissant le refresh_token au lieu du code. Les jetons d’actualisation sont valides pour toutes les ressources pour lesquelles votre client a déjà reçu le consentement d’accès. Par conséquent, un jeton d’actualisation émis sur une demande resource=https://graph.microsoft.com peut être utilisé pour demander un nouveau jeton d’accès.resource=https://contoso.com/api

Les jetons d’actualisation n’ont pas de durées de vie spécifiées. En règle générale, la durée de vie des jetons de rafraîchissement est relativement longue. 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. Votre application doit envisager et gérer correctement les erreurs retournées par le point de terminaison d’émission de jeton.

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. En particulier, lorsque vous utilisez un jeton d’actualisation dans le flux d’octroi du code d’autorisation, si vous recevez une réponse avec les codes d’erreur interaction_required ou invalid_grant, ignorez le jeton d’actualisation et demandez un nouveau code d’autorisation.

Un exemple de requête à l'endpoint spécifique au locataire (vous pouvez également utiliser l'endpoint commun) pour obtenir un nouveau jeton d'accès à l'aide d'un jeton d'actualisation ressemble à ceci :

// 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 réussie

Une réponse de jeton réussie se présente comme suit :

{
  "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ètre Description
type_de_jeton Type de jeton. La seule valeur prise en charge est bearer.
expire_dans Durée de vie restante du jeton en secondes. Une valeur classique est 3600 (une heure).
expire le Date et heure d’expiration du jeton. La date est représentée sous la forme du nombre de secondes comprises entre 1970-01-01T0:0:0Z UTC jusqu’à l’heure d’expiration.
ressource Identifie la ressource sécurisée que le jeton d’accès peut être utilisé pour accéder.
portée Autorisations d'usurpation d'identité accordées à l'application cliente native. L’autorisation par défaut est user_impersonation. Le propriétaire de la ressource cible peut inscrire d’autres valeurs dans Azure AD.
jeton d'accès Nouveau jeton d’accès demandé.
jeton_de_actualisation Un nouveau jeton d'actualisation OAuth 2.0 qui peut être utilisé pour demander de nouveaux jetons d’accès lorsque celui de cette réponse expire.

Réponse d’erreur

Un exemple de réponse d’erreur peut ressembler à ceci :

{
  "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ètre Description
erreur Une chaîne de code d’erreur pouvant être utilisée pour classer les types d’erreurs se produisant, et pouvant être utilisée pour intervenir face aux erreurs.
description de l'erreur Un message d’erreur spécifique qui peut aider un développeur à identifier la cause principale d’une erreur d’authentification.
codes_erreur Liste des codes d’erreur STS spécifiques pouvant être utiles dans les tests de diagnostic.
horodatage Heure à laquelle l’erreur s’est produite.
identifiant_de_trace Identifiant unique de la demande pouvant être utile dans les tests de diagnostic.
identifiant_de_corrélation Identifiant unique de la demande pouvant être utile dans les tests de diagnostic sur les divers composants.

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.

Étapes suivantes

Pour en savoir plus sur le point de terminaison Azure AD v1.0 et sur l’ajout d’authentification et d’autorisation à vos applications web et API web, consultez les exemples d’applications.