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 terminaison organizations.
  • 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.

Diagram showing the resource owner password credential flow

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.