Flux de code d’autorisation OAuth 2.0 dans Azure Active Directory B2COAuth 2.0 authorization code flow in Azure Active Directory B2C

Vous pouvez utiliser l’octroi de code d’autorisation OAuth 2.0 dans les applications qui sont installées sur un appareil pour accéder à des ressources protégées, comme des API web.You can use the OAuth 2.0 authorization code grant in apps installed on a device to gain access to protected resources, such as web APIs. Grâce à l’implémentation Azure Active Directory B2C (Azure AD B2C) d’OAuth 2.0, vous pouvez ajouter l’inscription, la connexion et d’autres tâches de gestion des identités à vos applications monopages, à vos applications mobiles et à vos applications de bureau.By using the Azure Active Directory B2C (Azure AD B2C) implementation of OAuth 2.0, you can add sign-up, sign-in, and other identity management tasks to your single-page, mobile, and desktop apps. Cet article est indépendant du langage.This article is language-independent. Il décrit comment envoyer et recevoir des messages HTTP sans utiliser de bibliothèque open source.In the article, we describe how to send and receive HTTP messages without using any open-source libraries. Dans la mesure du possible, nous vous recommandons d’utiliser les bibliothèques d’authentification Microsoft (MSAL) prises en charge. Voir les exemples d’applications qui utilisent une MSAL.When possible, we recommend you use the supported Microsoft Authentication Libraries (MSAL).Take a look at the sample apps that use MSAL.

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. Vous pouvez l’utiliser pour les activités d’authentification et d’autorisation avec la plupart des types d’applications, notamment les applications web, les applications monopages et les applications installées de façon native.You can use it for authentication and authorization in most application types, including web applications, single-page applications, and natively installed applications. Vous pouvez utiliser le flux de code d’autorisation OAuth 2.0 pour acquérir de manière sécurisée des jetons d’accès et des jetons d’actualisation pour vos applications, en vue d’accéder à des ressources sécurisées par un serveur d’autorisation.You can use the OAuth 2.0 authorization code flow to securely acquire access tokens and refresh tokens for your applications, which can be used to access resources that are secured by an authorization server. Le jeton d’actualisation permet au client d’acquérir de nouveaux jetons d’accès (et d’actualisation) après l’expiration du jeton d’accès, soit généralement au bout d’une heure.The refresh token allows the client to acquire new access (and refresh) tokens once the access token expires, typically after one hour.

Cet article est axé sur le flux de code d’autorisation OAuth 2.0 pour les clients publics.This article focuses on the public clients OAuth 2.0 authorization code flow. Un client public est une application cliente qui ne peut pas être approuvée pour maintenir de façon sécurisée l'intégrité d’un mot de passe secret.A public client is any client application that cannot be trusted to securely maintain the integrity of a secret password. Cela comprend les applications monopages, les applications mobiles, les applications de bureau et quasiment toutes les applications qui ne s’exécutent pas sur un serveur.This includes single-page applications, mobile apps, desktop applications, and essentially any application that doesn't run on a server.

Notes

Pour ajouter la gestion d’identité à une application web à l’aide d’Azure AD B2C, utilisez OpenID Connect plutôt qu’OAuth 2.0.To add identity management to a web app by using Azure AD B2C, use OpenID Connect instead of OAuth 2.0.

Azure AD B2C étend les flux OAuth 2.0 standard pour proposer plus qu’une simple authentification et une simple autorisation.Azure AD B2C extends the standard OAuth 2.0 flows to do more than simple authentication and authorization. Il introduit le flux utilisateur.It introduces the user flow. Avec les flux d’utilisateur, vous pouvez utiliser OAuth 2.0 pour ajouter des expériences utilisateur à votre application, comme l’inscription, la connexion et la gestion des profils.With user flows, you can use OAuth 2.0 to add user experiences to your application, such as sign-up, sign-in, and profile management. Les fournisseurs d’identité qui utilisent le protocole OAuth 2.0 incluent Amazon, Azure Active Directory, Facebook, GitHub, Google et LinkedIn.Identity providers that use the OAuth 2.0 protocol include Amazon, Azure Active Directory, Facebook, GitHub, Google, and LinkedIn.

Pour tester les requêtes HTTP de cet article :To try the HTTP requests in this article:

  1. Remplacez {tenant} par le nom de votre locataire Azure AD B2C.Replace {tenant} with the name of your Azure AD B2C tenant.
  2. Remplacez 90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6 par l’ID d’application d’une application que vous avez précédemment inscrite dans votre locataire Azure AD B2C.Replace 90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6 with the app ID of an application you've previously registered in your Azure AD B2C tenant.
  3. Remplacez {policy} par le nom d'une stratégie que vous avez créée dans votre locataire, par exemple b2c_1_sign_in.Replace {policy} with the name of a policy you've created in your tenant, for example b2c_1_sign_in.

Configuration de l’URI de redirection requise pour les applications monopagesRedirect URI setup required for single-page apps

Le flux de code d’autorisation pour des applications monopages requiert une configuration supplémentaire.The authorization code flow for single page applications requires some additional setup. Suivez les instructions permettant de créer votre application monopage pour marquer correctement votre URI de redirection comme étant activé pour CORS.Follow the instructions for creating your single-page application to correctly mark your redirect URI as enabled for CORS. Pour mettre à jour un URI de redirection afin d’activer CORS, vous pouvez cliquer sur l’invite de migration dans la section « Web » de l’onglet Authentification d’Inscriptions d’applications. Vous pouvez également ouvrir l’éditeur de manifeste d’inscriptions d’applications et définir le champ type pour votre URI de redirection sur spa dans la section replyUrlsWithType.To update an existing redirect URI to enable CORS, you can click on the migrate prompt in the "Web" section of the App registration's Authentication tab. Alternatively, you can open the App registrations manifest editor and set the type field for your redirect URI to spa in the replyUrlsWithType section.

Le type de redirection spa est rétrocompatible avec le flux implicite.The spa redirect type is backwards compatible with the implicit flow. Les applications qui utilisent actuellement le flux implicite pour obtenir des jetons peuvent passer au type d’URI de redirection spa sans problème et continuer à utiliser le flux implicite.Apps currently using the implicit flow to get tokens can move to the spa redirect URI type without issues and continue using the implicit flow.

1. Obtention d’un code d’autorisation1. Get 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. Il s’agit de la partie interactive du flux, dans laquelle l’utilisateur agit réellement.This is the interactive part of the flow, where the user takes action. Dans cette demande, le client indique dans le paramètre scope les autorisations qu’il doit obtenir auprès de l’utilisateur.In this request, the client indicates in the scope parameter the permissions that it needs to acquire from the user. Les trois exemples suivants (avec sauts de ligne pour faciliter la lecture) utilisent chacun un flux d’utilisateur différent.The following three examples (with line breaks for readability) each use a different user flow.

GET https://{tenant}.b2clogin.com/{tenant}.onmicrosoft.com/{policy}/oauth2/v2.0/authorize?
client_id=90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6
&response_type=code
&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob
&response_mode=query
&scope=90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6%20offline_access
&state=arbitrary_data_you_can_receive_in_the_response
&code_challenge=YTFjNjI1OWYzMzA3MTI4ZDY2Njg5M2RkNmVjNDE5YmEyZGRhOGYyM2IzNjdmZWFhMTQ1ODg3NDcxY2Nl
&code_challenge_method=S256
ParamètreParameter Requis ?Required? DescriptionDescription
{tenant}{tenant} ObligatoireRequired Nom de votre locataire Azure AD B2CName of your Azure AD B2C tenant
{policy}{policy} ObligatoireRequired Flux utilisateur à exécuter.The user flow to be run. Spécifiez le nom d'un flux utilisateur créé dans votre locataire Azure AD B2C.Specify the name of a user flow you've created in your Azure AD B2C tenant. Par exemple : b2c_1_sign_in, b2c_1_sign_up ou b2c_1_edit_profile.For example: b2c_1_sign_in, b2c_1_sign_up, or b2c_1_edit_profile.
client_idclient_id ObligatoireRequired ID d’application affecté à votre application dans le portail Azure.The application ID assigned to your app in the Azure portal.
response_typeresponse_type ObligatoireRequired Le type de réponse, qui doit inclure code pour le flux de code d’autorisation.The response type, which must include code for the authorization code flow.
redirect_uriredirect_uri ObligatoireRequired URI de redirection de votre application, où votre application envoie et reçoit des réponses d’authentification.The redirect URI of your app, where authentication responses are sent and received by your app. Il doit correspondre exactement à l’un des URI de redirection que vous avez enregistrés dans le portail, sauf qu’il doit être encodé au format URL.It must exactly match one of the redirect URIs that you registered in the portal, except that it must be URL-encoded.
scopescope ObligatoireRequired Une liste d’étendues séparées par des espaces.A space-separated list of scopes. Une valeur d’étendue unique indique à Azure Active Directory (Azure AD) les deux autorisations qui sont demandées.A single scope value indicates to Azure Active Directory (Azure AD) both of the permissions that are being requested. Utiliser l’ID de client comme étendue indique que votre application a besoin d’un jeton d’accès qui peut être utilisé avec votre propre service ou API web, représenté par le même ID de client.Using the client ID as the scope indicates that your app needs an access token that can be used against your own service or web API, represented by the same client ID. L’étendue offline_access indique que votre application a besoin d’un jeton d’actualisation pour un accès durable aux ressources.The offline_access scope indicates that your app needs a refresh token for long-lived access to resources. Vous pouvez également utiliser l’étendue openid pour demander un jeton d’ID à partir d’Azure AD B2C.You also can use the openid scope to request an ID token from Azure AD B2C.
response_moderesponse_mode RecommandéRecommended Méthode à utiliser pour renvoyer le code d’autorisation résultant à votre application.The method that you use to send the resulting authorization code back to your app. Il peut s’agir de query, form_post ou fragment.It can be query, form_post, or fragment.
statestate RecommandéRecommended Une valeur incluse dans la requête peut être une chaîne de n’importe quel contenu que vous voulez utiliser.A value included in the request that can be a string of any content that you want to use. Généralement, une valeur unique générée de manière aléatoire est utilisée, pour empêcher les attaques par falsification de requête intersites.Usually, a randomly generated unique value is used, to prevent cross-site request forgery attacks. L’état est également utilisé pour coder les informations sur l’état de l’utilisateur dans l’application avant la demande d’authentification.The state also is used to encode information about the user's state in the app before the authentication request occurred. Par exemple, la page dans laquelle l’utilisateur se trouvait ou le flux d’utilisateur en cours d’exécution.For example, the page the user was on, or the user flow that was being executed.
promptprompt FacultatifOptional Type d’interaction utilisateur requis.The type of user interaction that is required. Actuellement, la seule valeur valide est login, ce qui oblige l’utilisateur à entrer ses informations d’identification sur cette demande.Currently, the only valid value is login, which forces the user to enter their credentials on that request. L’authentification unique ne prendra pas effet.Single sign-on will not take effect.
code_challengecode_challenge recommandé/obligatoirerecommended / required Utilisé pour sécuriser l’octroi du code d’autorisation par PKCE (Proof Key for Code Exchange).Used to secure authorization code grants via Proof Key for Code Exchange (PKCE). 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. Cette option est désormais recommandée pour tous les types d’applications (natives, monopages et confidentielles clients comme des applications web).This is now recommended for all application types - native apps, SPAs, and confidential clients like web apps.
code_challenge_method recommandé/obligatoirerecommended / required 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. Ce DEVRAIT être S256, mais la spécification autorise l’utilisation de plain si, pour une raison quelconque, le client ne peut pas prendre en charge SHA256.This SHOULD be S256, but the spec allows the use of plain if for some reason the client cannot support SHA256.

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. La plateforme d’identités Microsoft prend en charge plain et S256.Microsoft identity platform supports both plain and S256. Pour plus d'informations, consultez le RFC PKCE.For more information, see the PKCE RFC. Cela est obligatoire pour les applications monopages utilisant le flux de code d’autorisation.This is required for single page apps using the authorization code flow.
login_hintlogin_hint NoNo Peut être utilisé pour prérenseigner le champ Nom de connexion de la page de connexion.Can be used to pre-fill the sign-in name field of the sign-in page. Pour plus d’informations, consultez Préremplir le nom de connexion.For more information, see Prepopulate the sign-in name.
domain_hintdomain_hint NoNo Fournit un indicateur à Azure AD B2C concernant le fournisseur d’identité sociale qui doit être utilisé pour la connexion.Provides a hint to Azure AD B2C about the social identity provider that should be used for sign-in. Si une valeur valide est incluse, l’utilisateur accède directement à la page de connexion du fournisseur d’identité.If a valid value is included, the user goes directly to the identity provider sign-in page. Pour plus d’informations, consultez Rediriger la connexion vers un fournisseur social.For more information, see Redirect sign-in to a social provider.
Paramètres personnalisésCustom parameters NoNo Paramètres personnalisés qui peuvent être utilisés avec des stratégies personnalisées.Custom parameters that can be used with custom policies. Par exemple, un URI de contenu de page personnalisée dynamique ou des programmes de résolution de revendication de clé-valeur.For example, dynamic custom page content URI, or key-value claim resolvers.

À ce stade, il est demandé à l’utilisateur d’effectuer le workflow du flux utilisateur.At this point, the user is asked to complete the user flow's workflow. Il est possible que l’utilisateur doive entrer son nom d’utilisateur et son mot de passe, se connecter avec une identité sociale, s’inscrire à l’annuaire, etc.This might involve the user entering their username and password, signing in with a social identity, signing up for the directory, or any other number of steps. Les actions de l’utilisateur dépendent de la façon dont le flux d’utilisateur est défini.User actions depend on how the user flow is defined.

Une fois que l’utilisateur a terminé le flux d’utilisateur, Azure AD retourne une réponse à votre application avec la valeur que vous avez utilisée pour redirect_uri.After the user completes the user flow, Azure AD returns a response to your app at the value you used for redirect_uri. Il utilise la méthode spécifiée dans le paramètre response_mode.It uses the method specified in the response_mode parameter. La réponse est exactement la même pour chacun des scénarios d’actions utilisateur, indépendamment du flux d’utilisateur exécuté.The response is exactly the same for each of the user action scenarios, independent of the user flow that was executed.

Une réponse correcte utilisant response_mode=query se présente ainsi :A successful response that uses response_mode=query looks like this:

GET urn:ietf:wg:oauth:2.0:oob?
code=AwABAAAAvPM1KaPlrEqdFSBzjqfTGBCmLdgfSTLEMPGYuNHSUYBrq...        // the authorization_code, truncated
&state=arbitrary_data_you_can_receive_in_the_response                // the value provided in the request
ParamètreParameter DescriptionDescription
codecode Le code d’autorisation demandé par l’application.The authorization code that the app requested. L’application peut utiliser ce code d’autorisation afin de demander un jeton d’accès pour une ressource cible.The app can use the authorization code to request an access token for a target resource. Les codes d’autorisation ont des durées de vie très courtes.Authorization codes are very short-lived. Généralement, ils expirent au bout de 10 minutes.Typically, they expire after about 10 minutes.
statestate Consultez la description complète dans le tableau de la section précédente.See the full description in the table in the preceding section. Si un paramètre state 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. L’application doit vérifier que les valeurs state de la demande et de la réponse sont identiques.The app should verify that the state values in the request and response are identical.

Les réponses d’erreur peuvent également être envoyées à l’URI de redirection, pour que l’application puisse les traiter de façon appropriée :Error responses also can be sent to the redirect URI so that the app can handle them appropriately:

GET urn:ietf:wg:oauth:2.0:oob?
error=access_denied
&error_description=The+user+has+cancelled+entering+self-asserted+information
&state=arbitrary_data_you_can_receive_in_the_response
ParamètreParameter DescriptionDescription
errorerror Chaîne de code d’erreur que vous pouvez utiliser pour classer les types d’erreurs se produisant.An error code string that you can use to classify the types of errors that occur. Vous pouvez également utiliser la chaîne pour réagir aux erreurs.You also can use the string to react to errors.
error_descriptionerror_description Un message d’erreur spécifique qui peut vous aider à identifier la cause principale d’une erreur d’authentification.A specific error message that can help you identify the root cause of an authentication error.
statestate Consultez la description complète dans le tableau précédent.See the full description in the preceding table. Si un paramètre state 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. L’application doit vérifier que les valeurs state de la demande et de la réponse sont identiques.The app should verify that the state values in the request and response are identical.

2. Obtention d’un jeton d’accès2. Get an access token

Un code d’autorisation étant acquis, vous pouvez maintenant échanger code contre un jeton sur la ressource prévue en envoyant une demande POST au point de terminaison /token.Now that you've acquired an authorization code, you can redeem the code for a token to the intended resource by sending a POST request to the /token endpoint. Dans Azure AD B2C, vous pouvez demander des jetons d’accès pour les autres API comme d’habitude en spécifiant leurs étendues dans la requête.In Azure AD B2C, you can request access tokens for other API's as usual by specifying their scope(s) in the request.

Vous pouvez également demander un jeton d’accès pour l’API web de back-end de votre application par convention visant à utiliser l’ID client de l’application comme étendue demandée (ce qui génère un jeton d’accès avec cet ID client comme « public ») :You can also request an access token for your app's own back-end Web API by convention of using the app's client ID as the requested scope (which will result in an access token with that client ID as the "audience"):

POST https://{tenant}.b2clogin.com/{tenant}.onmicrosoft.com/{policy}/oauth2/v2.0/token HTTP/1.1

Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code&client_id=90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6&scope=90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6 offline_access&code=AwABAAAAvPM1KaPlrEqdFSBzjqfTGBCmLdgfSTLEMPGYuNHSUYBrq...&redirect_uri=urn:ietf:wg:oauth:2.0:oob&code_verifier=ThisIsntRandomButItNeedsToBe43CharactersLong 
ParamètreParameter Requis ?Required? DescriptionDescription
{tenant}{tenant} ObligatoireRequired Nom de votre locataire Azure AD B2CName of your Azure AD B2C tenant
{policy}{policy} ObligatoireRequired Le flux utilisateur qui a été utilisé pour obtenir le code d’autorisation.The user flow that was used to acquire the authorization code. Vous ne pouvez pas utiliser un autre flux utilisateur dans cette demande.You cannot use a different user flow in this request.
client_idclient_id ObligatoireRequired ID d’application affecté à votre application dans le portail Azure.The application ID assigned to your app in the Azure portal.
client_secretclient_secret Oui, dans Web AppsYes, in Web Apps Secret d'application qui a été généré dans le portail Azure.The application secret that was generated in the Azure portal. Les clés secrètes client sont utilisées dans ce flux pour les scénarios de type application web, dans lesquels le client peut les stocker de manière sécurisée.Client secrets are used in this flow for Web App scenarios, where the client can securely store a client secret. Dans les scénarios de type application native (client public), les clés secrètes client ne peuvent pas être stockées de façon sécurisée et ne sont donc pas utilisées dans cet appel.For Native App (public client) scenarios, client secrets cannot be securely stored, and therefore are not used in this call. Si vous utilisez une clé secrète client, modifiez-la régulièrement.If you use a client secret, please change it on a periodic basis.
grant_typegrant_type ObligatoireRequired Type d’autorisation.The type of grant. Pour le flux de code d’autorisation, le type d’autorisation doit être authorization_code.For the authorization code flow, the grant type must be authorization_code.
scopescope RecommandéRecommended Une liste d’étendues séparées par des espaces.A space-separated list of scopes. Une valeur d’étendue unique indique à Azure AD les deux autorisations qui sont demandées.A single scope value indicates to Azure AD both of the permissions that are being requested. Utiliser l’ID de client comme étendue indique que votre application a besoin d’un jeton d’accès qui peut être utilisé avec votre propre service ou API web, représenté par le même ID de client.Using the client ID as the scope indicates that your app needs an access token that can be used against your own service or web API, represented by the same client ID. L’étendue offline_access indique que votre application a besoin d’un jeton d’actualisation pour un accès durable aux ressources.The offline_access scope indicates that your app needs a refresh token for long-lived access to resources. Vous pouvez également utiliser l’étendue openid pour demander un jeton d’ID à partir d’Azure AD B2C.You also can use the openid scope to request an ID token from Azure AD B2C.
codecode ObligatoireRequired Code d’autorisation acquis dans le premier tronçon du flux.The authorization code that you acquired in the first leg of the flow.
redirect_uriredirect_uri ObligatoireRequired URI de redirection de l’application où vous avez reçu le code d’autorisation.The redirect URI of the application where you received the authorization code.
code_verifiercode_verifier recommandérecommended 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 PKCE.For more information, see the PKCE RFC.

Un jeton de réponse correct se présente ainsi :A successful token response looks like this:

{
    "not_before": "1442340812",
    "token_type": "Bearer",
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...",
    "scope": "90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6 offline_access",
    "expires_in": "3600",
    "refresh_token": "AAQfQmvuDy8WtUv-sd0TBwWVQs1rC-Lfxa_NDkLqpg50Cxp5Dxj0VPF1mx2Z...",
}
ParamètreParameter DescriptionDescription
not_beforenot_before Heure à laquelle le jeton est considéré comme valide, en heure epoch.The time at which the token is considered valid, in epoch time.
token_typetoken_type Valeur du type de jeton.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.
access_tokenaccess_token JSON Web Token (JWT) signé que vous avez demandé.The signed JSON Web Token (JWT) that you requested.
scopescope Étendues de validité du jeton.The scopes that the token is valid for. Vous pouvez également utiliser des étendues pour mettre en cache des jetons pour une utilisation ultérieure.You also can use scopes to cache tokens for later use.
expires_inexpires_in La durée de validité du jeton (en secondes).The length of time that the token is valid (in seconds).
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 supplémentaires après l’expiration du jeton actuel.The app can use this token to acquire additional tokens after the current token expires. Les jetons d’actualisation sont de longue durée.Refresh tokens are long-lived. Vous pouvez les utiliser pour conserver l’accès aux ressources pendant de longues périodes.You can use them to retain access to resources for extended periods of time. Pour plus d’informations, consultez la référence sur les jetons Azure AD B2C.For more information, see the Azure AD B2C token reference.

Les réponses d’erreur ressemblent à ceci :Error responses look like this:

{
    "error": "access_denied",
    "error_description": "The user revoked access to the app.",
}
ParamètreParameter DescriptionDescription
errorerror Chaîne de code d’erreur que vous pouvez utiliser pour classer les types d’erreurs se produisant.An error code string that you can use to classify the types of errors that occur. Vous pouvez également utiliser la chaîne pour réagir aux erreurs.You also can use the string to react to errors.
error_descriptionerror_description Un message d’erreur spécifique qui peut vous aider à identifier la cause principale d’une erreur d’authentification.A specific error message that can help you identify the root cause of an authentication error.

3. Utilisation du jeton3. Use the token

Un jeton d’accès étant acquis, vous pouvez maintenant l’utiliser dans les demandes effectuées à vos API web principales 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 your back-end web APIs by including it in the Authorization header:

GET /tasks
Host: mytaskwebapi.com
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...

4. Actualisation du jeton4. Refresh the token

Les jetons d’accès et les jetons d’ID ont une courte durée de vie.Access tokens and ID tokens are short-lived. Après leur expiration, vous devez les actualiser pour continuer à accéder aux ressources.After they expire, you must refresh them to continue to access resources. Pour cela, envoyez une autre demande POST au point de terminaison /token.To do this, submit another POST request to the /token endpoint. Cette fois, fournissez l’élément refresh_token au lieu de l’élément code :This time, provide the refresh_token instead of the code:

POST https://{tenant}.b2clogin.com/{tenant}.onmicrosoft.com/{policy}/oauth2/v2.0/token HTTP/1.1

Content-Type: application/x-www-form-urlencoded

grant_type=refresh_token&client_id=90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6&scope=90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6 offline_access&refresh_token=AwABAAAAvPM1KaPlrEqdFSBzjqfTGBCmLdgfSTLEMPGYuNHSUYBrq...&redirect_uri=urn:ietf:wg:oauth:2.0:oob
ParamètreParameter Requis ?Required? DescriptionDescription
{tenant}{tenant} ObligatoireRequired Nom de votre locataire Azure AD B2CName of your Azure AD B2C tenant
{policy}{policy} ObligatoireRequired Flux utilisateur utilisé pour obtenir le jeton d’actualisation d’origine.The user flow that was used to acquire the original refresh token. Vous ne pouvez pas utiliser un autre flux utilisateur dans cette demande.You cannot use a different user flow in this request.
client_idclient_id ObligatoireRequired ID d’application affecté à votre application dans le portail Azure.The application ID assigned to your app in the Azure portal.
client_secretclient_secret Oui, dans Web AppsYes, in Web Apps Secret d'application qui a été généré dans le portail Azure.The application secret that was generated in the Azure portal. Les clés secrètes client sont utilisées dans ce flux pour les scénarios de type application web, dans lesquels le client peut les stocker de manière sécurisée.Client secrets are used in this flow for Web App scenarios, where the client can securely store a client secret. Dans les scénarios de type application native (client public), les clés secrètes client ne peuvent pas être stockées de façon sécurisée et ne sont donc pas utilisées dans cet appel.For Native App (public client) scenarios, client secrets cannot be securely stored, and therefore are not used in this call. Si vous utilisez une clé secrète client, modifiez-la régulièrement.If you use a client secret, please change it on a periodic basis.
grant_typegrant_type ObligatoireRequired Type d’autorisation.The type of grant. Pour ce tronçon du flux de code d’autorisation, le type d’autorisation doit être refresh_token.For this leg of the authorization code flow, the grant type must be refresh_token.
scopescope RecommandéRecommended Une liste d’étendues séparées par des espaces.A space-separated list of scopes. Une valeur d’étendue unique indique à Azure AD les deux autorisations qui sont demandées.A single scope value indicates to Azure AD both of the permissions that are being requested. Utiliser l’ID de client comme étendue indique que votre application a besoin d’un jeton d’accès qui peut être utilisé avec votre propre service ou API web, représenté par le même ID de client.Using the client ID as the scope indicates that your app needs an access token that can be used against your own service or web API, represented by the same client ID. L’étendue offline_access indique que votre application a besoin d’un jeton d’actualisation pour un accès de longue durée aux ressources.The offline_access scope indicates that your app will need a refresh token for long-lived access to resources. Vous pouvez également utiliser l’étendue openid pour demander un jeton d’ID à partir d’Azure AD B2C.You also can use the openid scope to request an ID token from Azure AD B2C.
redirect_uriredirect_uri FacultatifOptional URI de redirection de l’application où vous avez reçu le code d’autorisation.The redirect URI of the application where you received the authorization code.
refresh_tokenrefresh_token ObligatoireRequired Jeton d’actualisation d’origine que vous avez acquis dans le second tronçon du flux.The original refresh token that you acquired in the second leg of the flow.

Un jeton de réponse correct se présente ainsi :A successful token response looks like this:

{
    "not_before": "1442340812",
    "token_type": "Bearer",
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...",
    "scope": "90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6 offline_access",
    "expires_in": "3600",
    "refresh_token": "AAQfQmvuDy8WtUv-sd0TBwWVQs1rC-Lfxa_NDkLqpg50Cxp5Dxj0VPF1mx2Z...",
}
ParamètreParameter DescriptionDescription
not_beforenot_before Heure à laquelle le jeton est considéré comme valide, en heure epoch.The time at which the token is considered valid, in epoch time.
token_typetoken_type Valeur du type de jeton.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.
access_tokenaccess_token Jeton JWT signé que vous avez demandé.The signed JWT that you requested.
scopescope Étendues de validité du jeton.The scopes that the token is valid for. Vous pouvez également utiliser les étendues pour mettre en cache des jetons pour une utilisation ultérieure.You also can use the scopes to cache tokens for later use.
expires_inexpires_in La durée de validité du jeton (en secondes).The length of time that the token is valid (in seconds).
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 supplémentaires après l’expiration du jeton actuel.The app can use this token to acquire additional tokens after the current 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. Pour plus d’informations, consultez la référence sur les jetons Azure AD B2C.For more information, see the Azure AD B2C token reference.

Les réponses d’erreur ressemblent à ceci :Error responses look like this:

{
    "error": "access_denied",
    "error_description": "The user revoked access to the app.",
}
ParamètreParameter DescriptionDescription
errorerror Chaîne de code d’erreur que vous pouvez utiliser pour classer les types d’erreurs qui se produisent.An error code string that you can use to classify types of errors that occur. Vous pouvez également utiliser la chaîne pour réagir aux erreurs.You also can use the string to react to errors.
error_descriptionerror_description Un message d’erreur spécifique qui peut vous aider à identifier la cause principale d’une erreur d’authentification.A specific error message that can help you identify the root cause of an authentication error.

Utiliser votre propre annuaire Azure AD B2CUse your own Azure AD B2C directory

Pour essayer vous-même ces demandes, effectuez les étapes suivantes.To try these requests yourself, complete the following steps. Remplacez les exemples de valeurs que nous utilisons dans cet article par vos propres valeurs.Replace the example values we used in this article with your own values.

  1. Créez un annuaire Azure AD B2C.Create an Azure AD B2C directory. Utilisez le nom de votre annuaire dans les demandes.Use the name of your directory in the requests.
  2. Créez une application pour obtenir un ID d’application et un URI de redirection.Create an application to obtain an application ID and a redirect URI. Incluez un client natif dans votre application.Include a native client in your app.
  3. Créez vos flux d’utilisateurs pour obtenir vos noms de flux utilisateur.Create your user flows to obtain your user flow names.