image
image
image
image
image
image

Azure ad granttype

Plateforme d’identités Microsoft et flux d’octroi implicite OAuth 2.0

La plateforme d’identités Microsoft prend en charge le flux d’octroi implicite OAuth 2.0, comme décrit dans la spécification OAuth 2.0. La caractéristique déterminante de l’octroi implicite est que les jetons (jetons d’ID ou jetons d’accès) sont renvoyés directement à partir du point de terminaison /authorize au lieu du point de terminaison /token. Ceci est souvent utilisé dans le cadre du flux de code d’autorisation, dans ce que l’on appelle le « flux hybride », c’est-à-dire la récupération du jeton d’ID sur la demande /authorize avec un code d’autorisation.

Cet article explique comment programmer directement sur le protocole de votre application pour demander des jetons à partir de Microsoft Entra ID. Dans la mesure du possible, nous vous recommandons d’utiliser les bibliothèques d’authentification Microsoft (MSAL) prises en charge pour acquérir des jetons et appeler des API web sécurisées. Pour obtenir la liste des exemples de code qui utilisent MSAL, reportez-vous à l’identité Microsoft Exemples de code de plate-forme.

Avertissement

: Microsoft vous recommande de ne pas utiliser le flux d’octroi implicite. Dans la plupart des scénarios, des alternatives plus sécurisées sont disponibles et recommandées. Certaines configurations de ce flux nécessitent un très haut degré de confiance dans l’application et comportent des risques qui ne sont pas présents dans d’autres flux. Vous ne devez utiliser ce flux que lorsque d’autres flux plus sécurisés ne sont pas viables. Pour plus d’informations, consultez la section Problèmes de sécurité liés au flux d’octroi implicite.

Diagramme de protocole

Le diagramme suivant montre à quoi ressemble l’ensemble du flux de connexion implicite et les sections qui suivent décrivent chaque étape en détail.

Scénarios appropriés pour l’octroi implicite OAuth2 L’octroi

implicite n’est fiable que pour la partie interactive initiale de votre flux de connexion, où l’absence de n’a pas d’impact sur votre application. Cette limitation signifie que vous devez l’utiliser exclusivement dans le cadre du flux hybride, où votre application demande un code et un jeton à partir du point de terminaison d’autorisation. Dans un flux hybride, votre application reçoit un code qui peut être échangé contre un jeton d’actualisation, garantissant ainsi que la session de connexion de votre application reste valide au fil du temps.

Préférer le flux de code d’authentification

Avec certains navigateurs, le flux d’octroi implicite n’est plus une méthode d’authentification adaptée . Les fonctionnalités d’authentification unique (SSO) silencieuseNous recommandons vivement que toutes les nouvelles applications utilisent le flux de code d’autorisation qui prend désormais en charge les applications à page unique au lieu du flux implicite. Les applications monopages existantes doivent également migrer vers le flux de code d’autorisation.

Problèmes de sécurité liés au flux d’octroi implicite

Le flux d’octroi implicite est destiné aux applications web traditionnelles où le serveur a le contrôle sur le traitement sécurisé des données POST. Il existe deux façons principales de fournir des jetons avec le flux d’octroi implicite : où est renvoyé en tant que fragment d’URL ou en tant que paramètre de requête (à l’aide de et ). Dans le flux implicite où , le jeton est remis en toute sécurité via un formulaire HTML POST à l’URI de redirection du client. Cette méthode garantit que le jeton n’est pas exposé dans le fragment d’URL, ce qui évite les risques de fuite de jeton via l’historique du navigateur ou les en-têtes de référent.

Les problèmes de sécurité liés au flux implicite se posent lorsque les jetons sont livrés à l’aide de . Le fragment d’URL est la partie de l’URL qui vient après le Ce problème de sécurité pour les jetons dans les SPA ne s’applique pas non plus au flux implicite avec .

Quand devez-vous autoriser l’émission d’un jeton d’accès ou d’un jeton d’ID lorsqu’il est demandé à l’aide d’une subvention implicite ou d’un flux hybride ?

L’octroi implicite et le flux hybride ne sont pas aussi sécurisés que les autres flux OAuth. À moins que obligatoire, vous ne devez pas autoriser l’émission d’un jeton d’accès ou d’ID lorsqu’il est demandé à l’aide d’une autorisation implicite ou d’un flux hybride dans l’inscription de votre application. Si vous (ou vos développeurs) utilisez le MSAL dans votre application pour implémenter l’authentification et l’autorisation, il n’est pas nécessaire d’activer aucun des deux champs.

Toutefois, si vous (ou vos développeurs) n’utilisez pas MSAL dans votre application, le tableau suivant indique quand les jetons d’accès ou le jeton d’ID doivent être activés.

d’ID
Type d’application que vous créez Jetons que vous devez activer dans l’inscription de l’application
Une SPA (application monopage) qui n’utilise pas le flux de code d’autorisation avec PKCE Jetons d’accès et jetons
Jetons d’accès et jetons d’ID
Une application web ASP.NET Core et autres applications web qui utilisent des jetons d’ID d’authentification hybride

Envoyer la demande de connexion

Pour signer initialement l’utilisateur dans votre application, vous pouvez envoyer une demande d’authentification OpenID Connect et obtenir une à partir de la plateforme d’identités Microsoft.

Important

Pour demander un jeton d’ID et/ou un jeton d’accès, le flux d’octroi implicite correspondant doit être activé sur l’inscription de l’application dans la page Centre d’administration Microsoft Entra - Inscriptions d’applications, en sélectionnant Jetons d’ID et jetons d’accès dans la section Octroi implicite et flux hybrides. S’il n’est pas activé, une erreur sera renvoyée :

Paramètre Type Description
required La valeur du chemin d’accès à la demande peut être utilisée pour contrôler qui peut se connecter à l’application. Les valeurs autorisées sont , , et les identificateurs de locataire. Pour plus de détails, consultez Principes de base du protocole. De manière critique, pour les scénarios d’invité où vous signez un utilisateur d’un locataire dans un autre locataire, vous devez fournir l’identificateur de locataire pour le connecter correctement au locataire de ressource.
requis ID d’application (client) que la page Centre d’administration Microsoft Entra - Inscriptions d’applications a attribué à votre application.
obligatoire Doit être inclus pour la connexion OpenID Connect. Il peut également s’agir de l’option , . L’utilisation de here permet à votre application de recevoir immédiatement un jeton d’accès à partir du point de terminaison /authorize sans avoir à effectuer une deuxième demande au point de terminaison /author. Si vous utilisez le response_type, le paramètre doit contenir une portée en indiquant la ressource pour laquelle émettre le jeton (par exemple, sur Microsoft Graph). Il peut également contenir à la place de pour fournir un code d’autorisation, à utiliser dans le flux de code d’autorisation. Cette réponse + est parfois appelée flux hybride.
recommandé L’URI de redirection de votre application, où les réponses d’authentification sont envoyées et reçues dans votre application. Il doit correspondre exactement à l’une des URI de redirection que vous avez enregistrées dans le centre d’administration Microsoft Entra, sauf qu’il doit être encodé en URL.
required Une liste d’oscilloscopes séparés par des espaces. Pour OpenID Connect (), il doit inclure la portée , ce qui se traduit par l’autorisation « Se connecter » dans l’interface utilisateur de consentement. Si vous le souhaitez, vous pouvez également inclure les étendues et pour accéder à des données utilisateur supplémentaires. Vous pouvez également inclure d’autres champs d’application dans cette demande de demande de consentement à diverses ressources, si un Le jeton d’accès est demandé.
recommended Spécifie la méthode à utiliser pour renvoyer le jeton résultant à votre application. Par défaut, pour un jeton d’accès uniquement, mais si la demande inclut un id_token. Pour des raisons de sécurité, il est recommandé d’utiliser le flux implicite pour s’assurer que le jeton n’est pas exposé dans le fragment d’URL.
recommended Une valeur incluse dans la requête sont également renvoyées dans la réponse du jeton. Il peut s’agir d’une chaîne de n’importe quel contenu de votre choix. Une valeur unique générée de manière aléatoire est généralement utilisée pour empêcher les attaques de falsification de requête intersites. L’état est également utilisé pour coder des informations sur l’état de l’utilisateur dans l’application avant que la demande d’authentification ne se produise, telles que la page ou la vue sur laquelle il se trouvait.
required Une valeur incluse dans la requête, générée par l’application, qui est inclus dans le jeton d’ID résultant en tant que revendication. L’application peut ensuite vérifier cette valeur pour atténuer les attaques par relecture de jeton. La valeur est généralement une chaîne unique et aléatoire qui peut être utilisée pour identifier l’origine de la demande. Requis uniquement lorsqu’un id_token est demandé.
facultatif Indique le type d’interaction utilisateur requis. Les seules valeurs valides à l’heure actuelle sont , , et . Force l’utilisateur à entrer ses informations d’identification sur cette demande, ce qui annule l’authentification unique. C’est le contraire - cela garantit que l’utilisateur ne reçoit aucune invite interactive. Si la demande ne peut pas être traitée en mode silencieux via l’authentification unique, la plateforme d’identités Microsoft renvoie une erreur. Envoie l’utilisateur à un sélecteur de compte où tous les comptes mémorisés dans la session apparaissent. déclenchera la boîte de dialogue de consentement OAuth une fois que l’utilisateur s’est connecté, lui demandant d’accorder des autorisations à l’application.
facultatif Vous pouvez utiliser ce paramètre pour préremplir le champ du nom d’utilisateur et de l’adresse e-mail de la page de connexion de l’utilisateur, si vous connaissez le nom d’utilisateur à l’avance. Souvent, les applications utilisent ce paramètre lors de la réauthentification, après avoir déjà extrait la revendication facultative d’une connexion précédente.
facultatif S’il est inclus, il ignore le processus de découverte par e-mail que l’utilisateur passe par la page de connexion, ce qui permet une expérience utilisateur légèrement plus rationalisée. Ce paramètre est couramment utilisé pour les applications métier qui fonctionnent dans un seul locataire, où elles fournissent un nom de domaine au sein d’un locataire donné, redirigeant l’utilisateur vers le fournisseur de fédération de ce locataire. Cette astuce empêche les invités de se connecter à cette application et limite l’utilisation d’informations d’identification cloud telles que FIDO.

À ce stade, l’utilisateur est invité à pour saisir leurs informations d’identification et terminer l’authentification. La plateforme d’identités Microsoft s’assure que l’utilisateur a consenti aux autorisations indiquées dans le paramètre de requête. Si l’utilisateur n’a consenti à aucune de ces autorisations, il lui demande de consentir aux autorisations requises. Pour plus d’informations, consultez Autorisations, consentement et applications mutualisées.

Une fois que l’utilisateur s’est authentifié et a donné son consentement, la plateforme d’identités Microsoft renvoie une réponse à votre application à l’adresse indiquée , à l’aide de la méthode spécifiée dans le paramètre.

Réponse réussie

Une réponse réussie utilisant et ressemble à ce qui suit (avec des sauts de ligne pour plus de lisibilité) :

Paramètre Description
Inclus si inclut . Il s’agit d’un code d’autorisation qui peut être utilisé dans le code d’autorisation couler.
Inclus si comprend . Jeton d’accès demandé par l’application. Le jeton d’accès ne doit pas être décodé ou inspecté d’une autre manière, il doit être traité comme une chaîne opaque.
Inclus si comprend . Il s’agit toujours d’un .
Inclus si comprend . Indique le nombre de secondes pendant lesquelles le jeton est valide, à des fins de mise en cache.
Inclus si comprend . Indique une ou plusieurs étendues pour lesquelles le est valide. Peut ne pas inclure toutes les étendues demandées si elles ne s’appliquaient pas à l’utilisateur. Par exemple, les étendues Microsoft Entra uniquement demandées lors de la connexion à l’aide d’un compte personnel.
Un jeton Web JSON (JWT) signé. L’application peut décoder 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 limites d’autorisation ou de sécurité. Pour plus d’informations sur les jetons d’ID, reportez-vous à la section .
Remarque : Fourni uniquement si la portée a été demandée et incluse.
Si un paramètre d’état est inclus dans la demande, la même valeur doit apparaître dans la réponse. L’application doit vérifier que les valeurs d’état de la demande et de la réponse sont identiques.

Avertissement

N’essayez pas de valider ou de lire les jetons d’une API que vous ne possédez pas, y compris les jetons de cet exemple, dans votre code. Les jetons pour les services Microsoft peuvent utiliser un format spécial qui ne sera pas validé en tant que JWT, et peuvent également être chiffrés pour les utilisateurs grand public (compte Microsoft). Bien que la lecture des jetons soit un outil de débogage et d’apprentissage utile, ne prenez pas de dépendances à ce sujet dans votre code et ne supposez pas de spécificités sur les jetons qui ne sont pas pour une API que vous contrôlez.

Réponse d’erreur

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

Paramètre Description
Chaîne de code d’erreur qui peut être utilisée pour classer les types d’erreurs qui se produisent et peut être utilisée pour réagir aux erreurs.
Message d’erreur spécifique qui peut aider un développeur à identifier la cause première d’une erreur d’authentification.

Acquérir des jetons d’accès en mode silencieux

Maintenant que votre utilisateur est connecté à votre application à page unique, vous pouvez obtenir en mode silencieux des jetons d’accès pour appeler des API web sécurisées par la plateforme d’identités Microsoft, telle que Microsoft Graph. Même si vous avez déjà reçu un jeton à l’aide de l’response_type, vous pouvez utiliser cette méthode pour acquérir des jetons vers des ressources supplémentaires sans rediriger l’utilisateur pour qu’il signe à nouveau.

Important

: Il est peu probable que cette partie du flux implicite fonctionne pour votre application, car elle est utilisée dans différents navigateurs en raison de la propriété . Bien que cela fonctionne toujours dans les navigateurs basés sur Chromium qui ne sont pas en Incognito, les développeurs devraient reconsidérer l’utilisation de cette partie du flux.

Dans le flux OpenID Connect/OAuth normal, vous devez effectuer une demande au point de terminaison de la plateforme d’identités Microsoft. Vous pouvez effectuer la requête dans un iframe masqué pour obtenir de nouveaux jetons pour d’autres API web :

Pour plus d’informations sur les paramètres de requête dans l’URL, consultez Envoyer la demande de connexion.

Conseil

Essayez de copier et coller la requête suivante dans un onglet de navigateur à l’aide d’un véritable et à partir de l’enregistrement de votre application. Cela vous permettra de voir la demande de jeton silencieux en action.

Grâce au paramètre, cette requête réussit ou échoue immédiatement et retourne à votre application. La réponse est envoyée à votre application à l’adresse indiquée , à l’aide de la méthode spécifiée dans le paramètre.

Réponse réussie

Une réponse réussie à l’aide ressemble à :

Paramètre Description
Inclus si inclut . Jeton d’accès demandé par l’application, dans ce cas pour Microsoft Graph. Le jeton d’accès ne doit pas être décodé ou inspecté d’une autre manière, il doit être traité comme une chaîne opaque.
Il s’agit toujours d’un .
Indique le nombre de secondes pendant lesquelles le jeton est valide, à des fins de mise en cache.
Indique une ou plusieurs étendues pour lesquelles le jeton d’accès est valide. Peut ne pas inclure toutes les étendues demandées, si elles ne s’appliquaient pas à l’utilisateur (Si des étendues Microsoft Entra uniquement sont demandées lorsqu’un compte personnel est utilisé pour se connecter).
Un jeton Web JSON (JWT) signé. Inclus si comprend . L’application peut décoder 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 id_tokens, consultez la référence.
Remarque : Fourni uniquement si la portée a été demandée.
Si un paramètre d’état est inclus dans la demande, la même valeur doit apparaître dans la réponse. L’application doit vérifier que les valeurs d’état de la demande et de la réponse sont identiques.

Réponse d’erreur

Les réponses d’erreur peuvent également être envoyées à l’application afin qu’elle puisse les gérer de manière appropriée. Si , une erreur attendue est :

Paramètre Description
Chaîne de code d’erreur qui peut être utilisée pour classer les types d’erreurs qui se produisent et qui peut être utilisée pour réagir aux erreurs.
Message d’erreur spécifique qui peut aider un développeur à identifier la cause première d’une erreur d’authentification.

Si vous recevez cette erreur dans la demande iframe, l’utilisateur doit se connecter à nouveau de manière interactive pour récupérer un nouveau jeton. Vous pouvez choisir de traiter ce cas de la manière qui convient le mieux à votre application.

Actualisation des jetons

L’octroi implicite ne fournit pas de jetons d’actualisation. Les jetons d’ID et les jetons d’accès expirent après une courte période, de sorte que votre application doit être prête à actualiser ces jetons périodiquement. Pour actualiser l’un ou l’autre type de jeton, vous pouvez effectuer la même opération Requête iframe précédemment décrite, en utilisant le paramètre pour contrôler le comportement de la plate-forme d’identité. Si vous souhaitez recevoir un nouveau jeton d’ID, veillez à utiliser dans le paramètre et , et un paramètre.

Envoyer une demande de déconnexion Type de

paramètre

OpenID Connect

Description
requise La valeur du chemin d’accès à la demande peut être utilisée pour contrôler qui peut se connecter à l’application. Les valeurs autorisées sont , , et les identificateurs de locataire. Pour plus de détails, consultez Principes de base du protocole.
recommended URL à laquelle l’utilisateur doit être renvoyé une fois la déconnexion terminée. Cette valeur doit correspondre à l’une des URI de redirection enregistrées pour l’application. S’il n’est pas inclus, la plateforme d’identité Microsoft affiche à l’utilisateur un message générique.

Voir aussi