Plateforme d’identités Microsoft et informations d’identification du mot de passe du propriétaire de la ressource OAuth 2.0
La plateforme d’identité Microsoft prend en charge l’octroi des informations d’identification de mot de passe du propriétaire des ressources OAuth 2.0, qui permet à une application de connecter l’utilisateur en gérant directement son mot de passe. Cet article explique comment programmer directement par rapport au protocole dans votre application. Dans la mesure du possible, nous vous recommandons d’utiliser les bibliothèques d’authentification Microsoft (MSAL) prises en charge au lieu d’acquérir des jetons et d’appeler des API web sécurisées. Jetez également un coup d’œil aux exemples d’applications qui utilisent MSAL.
Avertissement
Microsoft vous recommande de ne pas utiliser le flux ROPC. Dans la plupart des scénarios, des alternatives plus sécurisées sont disponibles et recommandées. Ce flux demande un degré de confiance très élevé dans l’application et comporte des risques qui ne sont pas présents dans d’autres flux. Utilisez ce flux uniquement lorsqu’aucun autre flux plus sécurisé n’est viable.
Important
- La plateforme d’identité Microsoft prend en charge l’octroi ROPC uniquement pour les locataires Microsoft Entra , et non pour les comptes personnels. Cela signifie que vous devez utiliser un point de terminaison spécifique au locataire (
https://login.microsoftonline.com/{TenantId_or_Name}
) ou le point de terminaisonorganizations
. - Les comptes personnels qui sont invités sur un locataire Microsoft Entra ne peuvent pas utiliser le flux ROPC.
- Les comptes sans mots de passe ne peuvent pas se connecter avec ROPC, ce qui signifie que les fonctionnalités telles que la connexion SMS, FIDO et l’application Authenticator ne fonctionneront pas avec ce flux. Si votre application ou vos utilisateurs ont besoin de ces fonctionnalités, utilisez un type d’autorisation autre que ROPC.
- Si les utilisateurs doivent utiliser l’authentification multifacteur (MFA) pour se connecter à l’application, ils seront au lieu de cela bloqués.
- ROPC n’est pas pris en charge dans les scénarios de la fédération d’identités hybrides (par exemple, Microsoft Entra ID et AD FS utilisés pour authentifier des comptes locaux). Si les utilisateurs sont redirigés en pleine page vers des fournisseurs d’identité locaux, Microsoft Entra ID n’est pas en mesure de tester le nom d’utilisateur et le mot de passe auprès de ce fournisseur d’identité. L’authentification directe est toutefois prise en charge avec ROPC.
- Voici une exception à un scénario d’identité hybride : la stratégie de découverte du domaine d’accueil avec AllowCloudPasswordValidation défini sur TRUE permet au flux ROPC de fonctionner pour les utilisateurs fédérés lorsque le mot de passe local est synchronisé avec le Cloud. Pour plus d’informations, consultez Activer l’authentification ROPC directe des utilisateurs fédérés pour les applications héritées.
- Les mots de passe avec des espaces au début ou à la fin ne sont pas pris en charge par le flux ROPC.
Diagramme de protocole
Le diagramme qui suit montre le flux ROPC.
Requête d’autorisation
Le flux ROPC est une requête unique : il envoie l’identification du client et les informations d’identification de l’utilisateur au fournisseur d’identité, puis il reçoit en retour des jetons. Le client doit demander l’adresse e-mail (UPN) et le mot de passe de l’utilisateur avant de continuer. Immédiatement après une demande réussie, le client doit supprimer de la mémoire les informations d’identification de l’utilisateur de façon sécurisée. Il ne doit jamais les enregistrer.
// Line breaks and spaces are for legibility only. This is a public client, so no secret is required.
POST {tenant}/oauth2/v2.0/token
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded
client_id=00001111-aaaa-2222-bbbb-3333cccc4444
&scope=user.read%20openid%20profile%20offline_access
&username=MyUsername@myTenant.com
&password=SuperS3cret
&grant_type=password
Paramètre | Condition | Description |
---|---|---|
tenant |
Obligatoire | Locataire de l’annuaire auquel vous voulez connecter l’utilisateur. Le locataire peut être au format GUID ou sous forme de nom convivial. Toutefois, son paramètre ne peut pas être défini sur common ou consumers , mais peut être défini sur organizations . |
client_id |
Requis | ID d’application (client) que la page Inscriptions d’applications du centre d’administration Microsoft Entra a attribué à votre application. |
grant_type |
Requis | Cette propriété doit être définie sur password . |
username |
Obligatoire | Adresse e-mail de l’utilisateur. |
password |
Obligatoire | Mot de passe de l’utilisateur. |
scope |
Recommandé | Une liste (séparée par des espaces) d’étendues, ou d’autorisations, exigées par l’application. Dans un flux interactif, l’administrateur ou l’utilisateur doit accepter ces étendues au préalable. |
client_secret |
Parfois obligatoire | Si votre application est un client public, client_secret ou client_assertion ne peuvent pas être inclus. Si l’application est un client confidentiel, le paramètre doit être inclus. |
client_assertion |
Parfois obligatoire | Forme différente de client_secret , générée à l’aide d’un certificat. Pour plus d’informations, consultez Informations d’identification de certificat. |
Réponse d’authentification réussie
L’exemple suivant montre une réponse de jeton réussie :
{
"token_type": "Bearer",
"scope": "User.Read profile openid email",
"expires_in": 3599,
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...",
"refresh_token": "AwABAAAAvPM1KaPlrEqdFSBzjqfTGAMxZGUTdM0t4B4...",
"id_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJhdWQiOiIyZDRkMTFhMi1mODE0LTQ2YTctOD..."
}
Paramètre | Format | Description |
---|---|---|
token_type |
String | Toujours défini sur Bearer . |
scope |
Chaînes séparées par un espace | Si un jeton d’accès est retourné, ce paramètre liste les étendues pour lesquelles le jeton d’accès est valide. |
expires_in |
int | Nombre de secondes pendant lesquelles le jeton d’accès inclus est valide. |
access_token |
Chaîne opaque | Émise pour les étendues qui ont été demandées. |
id_token |
JWT | Émis si le paramètre scope d’origine inclut l’étendue openid . |
refresh_token |
Chaîne opaque | Émise si le paramètre scope d’origine inclut offline_access . |
Vous pouvez utiliser le jeton d’actualisation pour acquérir de nouveaux jetons d’accès et actualiser des jetons avec le même flux détaillé décrit dans la documentation du flux de code OAuth.
Avertissement
N’essayez pas de valider ou de lire des jetons pour des API dont vous n’êtes pas propriétaire, y compris les jetons de cet exemple, dans votre code. Les jetons associés aux services Microsoft peuvent utiliser un format spécial qui n’est pas validé comme jeton JWT, et peuvent également être chiffrés pour les utilisateurs consommateurs (de comptes Microsoft). Même si la lecture des jetons est un outil utile de débogage et d’apprentissage, n’y associez pas de dépendances dans votre code ou tenez compte des spécificités des jetons qui ne correspondent pas à une API que vous contrôlez.
Réponse d’erreur
Si l’utilisateur n’a pas fourni le nom d’utilisateur ou le mot de passe correct, ou si le client n’a pas reçu le consentement demandé, l’authentification échoue.
Error | Description | Action du client |
---|---|---|
invalid_grant |
Échec de l’authentification | Les informations d’identification étaient incorrectes ou le client n’a pas le consentement pour les étendues demandées. Si les étendues ne sont pas accordées, une erreur consent_required est retournée. Pour résoudre cette erreur, le client doit diriger l’utilisateur vers une invite interactive avec une vue web ou un navigateur. |
invalid_request |
La demande a été incorrectement construite | Le type d’octroi n’est pas pris en charge sur les contextes d’authentification /common ou /consumers . Utilisez /organizations ou un ID de locataire à la place. |
En savoir plus
Pour obtenir un exemple d’implémentation du flux ROPC, consultez l’exemple de code Application console .NET sur GitHub.