Plateforme d’identités Microsoft et flux On-Behalf-Of OAuth 2.0Microsoft identity platform and OAuth 2.0 On-Behalf-Of flow

Le flux On-Behalf-Of (OBO) OAuth 2.0 répond au cas d’usage dans le cadre duquel une application appelle un service/une API web qui, à son tour, doit appeler un autre service/une autre API web.The OAuth 2.0 On-Behalf-Of flow (OBO) serves the use case where an application invokes a service/web API, which in turn needs to call another service/web API. L’idée est de propager l’identité et les autorisations de l’utilisateur délégué via la chaîne de la demande.The idea is to propagate the delegated user identity and permissions through the request chain. Pour que le service de niveau intermédiaire puisse faire des demandes authentifiées au service en aval, il doit sécuriser un jeton d’accès de la plateforme d’identité Microsoft pour le compte de l’utilisateur.For the middle-tier service to make authenticated requests to the downstream service, it needs to secure an access token from the Microsoft identity platform, on behalf of the user.

Cet article explique comment programmer directement par rapport au protocole dans votre application.This article describes how to program directly against the protocol in your 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.When possible, we recommend you use the supported Microsoft Authentication Libraries (MSAL) instead to acquire tokens and call secured web APIs. Jetez également un coup d’œil aux exemples d’applications qui utilisent MSAL.Also take a look at the sample apps that use MSAL.

Notes

Depuis mai 2018, il n’est pas possible d’utiliser un jeton id_token dérivé du flux implicite pour le flux OBO.As of May 2018, some implicit-flow derived id_token can't be used for OBO flow. Les applications à une seule page doivent passer un jeton d’accès à un client confidentiel de niveau intermédiaire pour effectuer des flux OBO à la place.Single-page apps (SPAs) should pass an access token to a middle-tier confidential client to perform OBO flows instead. Pour plus d’informations sur les clients pouvant effectuer des appels OBO, consultez Limitations.For more info about which clients can perform OBO calls, see limitations.

Schéma de protocoleProtocol diagram

Supposons que l’utilisateur ait été authentifié dans une application à l’aide du flux d’octroi de code d’autorisation OAuth 2.0 ou d’un autre flux de connexion.Assume that the user has been authenticated on an application using the OAuth 2.0 authorization code grant flow or another login flow. À ce stade, l’application a un jeton d’accès pour l’API A (jeton A) avec les revendications et le consentement de l’utilisateur pour accéder à l’API web de niveau intermédiaire (API A).At this point, the application has an access token for API A (token A) with the user's claims and consent to access the middle-tier web API (API A). L’API A doit maintenant faire une demande authentifiée à l’API web en aval (API B).Now, API A needs to make an authenticated request to the downstream web API (API B).

Les étapes qui suivent constituent le flux OBO et sont décrites à l’aide du diagramme suivant.The steps that follow constitute the OBO flow and are explained with the help of the following diagram.

Montre le flux On-Behalf-Of OAuth 2.0

  1. L’application cliente adresse une demande à l’API A avec le jeton A (avec une revendication d’API A aud).The client application makes a request to API A with token A (with an aud claim of API A).
  2. L’API A s’authentifie auprès du point de terminaison d’émission de jeton de la plateforme d’identités Microsoft et demande un jeton pour accéder à l’API B.API A authenticates to the Microsoft identity platform token issuance endpoint and requests a token to access API B.
  3. Le point de terminaison d’émission de jeton de la plateforme d’identités Microsoft valide les informations d’identification de l’API A avec le jeton A et envoie le jeton d’accès pour l’API B (jeton B) à l’API A.The Microsoft identity platform token issuance endpoint validates API A's credentials along with token A and issues the access token for API B (token B) to API A.
  4. Le jeton B est défini par l’API A dans l’en-tête d’autorisation de la requête adressée à l’API B.Token B is set by API A in the authorization header of the request to API B.
  5. Les données de la ressource sécurisée sont retournées par l’API B à l’API A, puis au client.Data from the secured resource is returned by API B to API A, and from there to the client.

Notes

Dans ce scénario, le service de niveau intermédiaire n’a aucune interaction utilisateur pour obtenir le consentement de l’utilisateur pour accéder à l’API en aval.In this scenario, the middle-tier service has no user interaction to obtain the user's consent to access the downstream API. Par conséquent, l’option d’accorder l’accès à l’API en aval est présentée au préalable lors de l’étape de consentement pendant l’authentification.Therefore, the option to grant access to the downstream API is presented upfront as a part of the consent step during authentication. Pour savoir comment effectuer cette configuration pour votre application, consultez Obtention du consentement pour l’application de niveau intermédiaire.To learn how to set this up for your app, see Gaining consent for the middle-tier application.

Demande de jeton d’accès de niveau intermédiaireMiddle-tier access token request

Pour demander un jeton d’accès, adressez une requête HTTP POST au point de terminaison du jeton de la plateforme d’identités Microsoft spécifique au locataire, avec les paramètres suivants.To request an access token, make an HTTP POST to the tenant-specific Microsoft identity platform token endpoint with the following parameters.

https://login.microsoftonline.com/<tenant>/oauth2/v2.0/token

Deux cas de figure se présentent, selon que l’application cliente choisit d’être sécurisée par un secret partagé ou un certificat.There are two cases depending on whether the client application chooses to be secured by a shared secret or a certificate.

Premier cas : Requête de jeton d’accès avec un secret partagéFirst case: Access token request with a shared secret

Lorsque l’application utilise un secret partagé, la demande de jeton d’accès de service à service contient les paramètres suivants :When using a shared secret, a service-to-service access token request contains the following parameters:

ParamètreParameter TypeType DescriptionDescription
grant_type ObligatoireRequired Type de la demande de jeton.The type of token request. Pour une demande à l’aide d’un JWT, la valeur doit être urn:ietf:params:oauth:grant-type:jwt-bearer.For a request using a JWT, the value must be urn:ietf:params:oauth:grant-type:jwt-bearer.
client_id ObligatoireRequired L’ID (client) d’application attribué à votre application par la page Inscriptions d’applications du portail Azure.The application (client) ID that the Azure portal - App registrations page has assigned to your app.
client_secret ObligatoireRequired La clé secrète client que vous avez générée pour votre application sur la page Inscriptions d’applications du portail Azure.The client secret that you generated for your app in the Azure portal - App registrations page.
assertion ObligatoireRequired Jeton d’accès qui a été envoyé à l’API de niveau intermédiaire.The access token that was sent to the middle-tier API. Ce jeton doit comporter une revendication d’audience (aud) de l’application qui effectue cette requête OBO (l’application indiquée par le champ client-id).This token must have an audience (aud) claim of the app making this OBO request (the app denoted by the client-id field). Les applications ne peuvent pas accepter un jeton pour une autre application. (Par exemple, si un client envoie à une API un jeton pour MS Graph, l’API ne peut pas accepter ce jeton avec OBO.Applications cannot redeem a token for a different app (so e.g. if a client sends an API a token meant for MS Graph, the API cannot redeem it using OBO. Au lieu de cela, il doit refuser le jeton.)It should instead reject the token).
scope ObligatoireRequired Liste des étendues (séparées par des espaces) pour la demande de jeton.A space separated list of scopes for the token request. Pour plus d’informations, consultez Étendues.For more information, see scopes.
requested_token_use ObligatoireRequired Spécifie comment la demande doit être traitée.Specifies how the request should be processed. Dans le flux OBO, la valeur doit être définie sur on_behalf_of.In the OBO flow, the value must be set to on_behalf_of.

ExempleExample

La requête HTTP POST suivante demande un jeton d’accès et un jeton d’actualisation avec l’étendue user.read pour l’API web https://graph.microsoft.com.The following HTTP POST requests an access token and refresh token with user.read scope for the https://graph.microsoft.com web API.

//line breaks for legibility only

POST /oauth2/v2.0/token HTTP/1.1
Host: login.microsoftonline.com/<tenant>
Content-Type: application/x-www-form-urlencoded

grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer
&client_id=2846f71b-a7a4-4987-bab3-760035b2f389
&client_secret=BYyVnAt56JpLwUcyo47XODd
&assertion=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6InowMzl6ZHNGdWl6cEJmQlZLMVRuMjVRSFlPMCJ9.eyJhdWQiOiIyO{a lot of characters here}
&scope=https://graph.microsoft.com/user.read+offline_access
&requested_token_use=on_behalf_of

Deuxième cas : Requête de jeton d’accès avec un certificatSecond case: Access token request with a certificate

Une demande de jeton d’accès de service à service avec un certificat contient les paramètres suivants :A service-to-service access token request with a certificate contains the following parameters:

ParamètreParameter TypeType DescriptionDescription
grant_type ObligatoireRequired Type de la demande de jeton.The type of the token request. Pour une demande à l’aide d’un JWT, la valeur doit être urn:ietf:params:oauth:grant-type:jwt-bearer.For a request using a JWT, the value must be urn:ietf:params:oauth:grant-type:jwt-bearer.
client_id ObligatoireRequired L’ID (client) d’application attribué à votre application par la page Inscriptions d’applications du portail Azure.The application (client) ID that the Azure portal - App registrations page has assigned to your app.
client_assertion_type ObligatoireRequired La valeur doit être urn:ietf:params:oauth:client-assertion-type:jwt-bearer.The value must be urn:ietf:params:oauth:client-assertion-type:jwt-bearer.
client_assertion ObligatoireRequired Assertion (jeton Web JSON) dont vous avez besoin pour créer et signer avec le certificat inscrit comme informations d’identification pour votre application.An assertion (a JSON web token) that you need to create and sign with the certificate you registered as credentials for your application. Pour découvrir comment inscrire votre certificat et le format de l’assertion, consultez Informations d’identification de certificat.To learn how to register your certificate and the format of the assertion, see certificate credentials.
assertion ObligatoireRequired Jeton d’accès qui a été envoyé à l’API de niveau intermédiaire.The access token that was sent to the middle-tier API. Ce jeton doit comporter une revendication d’audience (aud) de l’application qui effectue cette requête OBO (l’application indiquée par le champ client-id).This token must have an audience (aud) claim of the app making this OBO request (the app denoted by the client-id field). Les applications ne peuvent pas accepter un jeton pour une autre application. (Par exemple, si un client envoie à une API un jeton pour MS Graph, l’API ne peut pas accepter ce jeton avec OBO.Applications cannot redeem a token for a different app (so e.g. if a client sends an API a token meant for MS Graph, the API cannot redeem it using OBO. Au lieu de cela, il doit refuser le jeton.)It should instead reject the token).
requested_token_use ObligatoireRequired Spécifie comment la demande doit être traitée.Specifies how the request should be processed. Dans le flux OBO, la valeur doit être définie sur on_behalf_of.In the OBO flow, the value must be set to on_behalf_of.
scope ObligatoireRequired Liste des étendues (séparées par des espaces) pour la demande de jeton.A space-separated list of scopes for the token request. Pour plus d’informations, consultez Étendues.For more information, see scopes.

Notez que les paramètres sont presque les mêmes que dans le cas de la demande par secret partagé, sauf que le paramètre client_secret est remplacé par deux paramètres : client_assertion_type et client_assertion.Notice that the parameters are almost the same as in the case of the request by shared secret except that the client_secret parameter is replaced by two parameters: a client_assertion_type and client_assertion.

ExempleExample

La requête HTTP POST suivante demande un jeton d’accès avec l’étendue user.read pour l’API web https://graph.microsoft.com avec un certificat.The following HTTP POST requests an access token with user.read scope for the https://graph.microsoft.com web API with a certificate.

// line breaks for legibility only

POST /oauth2/v2.0/token HTTP/1.1
Host: login.microsoftonline.com/<tenant>
Content-Type: application/x-www-form-urlencoded

grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer
&client_id=625391af-c675-43e5-8e44-edd3e30ceb15
&client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer
&client_assertion=eyJhbGciOiJSUzI1NiIsIng1dCI6Imd4OHRHeXN5amNScUtqRlBuZDdSRnd2d1pJMCJ9.eyJ{a lot of characters here}
&assertion=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6InowMzl6ZHNGdWl6cEJmQlZLMVRuMjVRSFlPMCIsImtpZCI6InowMzl6ZHNGdWl6cEJmQlZLMVRuMjVRSFlPMCJ9.eyJhdWQiO{a lot of characters here}
&requested_token_use=on_behalf_of
&scope=https://graph.microsoft.com/user.read+offline_access

Réponse à une demande de jeton d’accès de niveau intermédiaireMiddle-tier access token response

Une réponse correspondant à une réussite est une réponse JSON OAuth 2.0 avec les paramètres suivants.A success response is a JSON OAuth 2.0 response with the following parameters.

ParamètreParameter DescriptionDescription
token_type Indique la valeur du type de jeton.Indicates the token type value. Le seul type pris en charge par la plateforme d’identités Microsoft est Bearer.The only type that Microsoft identity platform supports is Bearer. Pour plus d’informations sur les jetons du porteur, consultez OAuth 2.0 Authorization Framework: Bearer Token Usage (RFC 6750).For more info about bearer tokens, see the OAuth 2.0 Authorization Framework: Bearer Token Usage (RFC 6750).
scope Étendue de l’accès accordé dans le jeton.The scope of access granted in the token.
expires_in Durée de validité, en secondes, du jeton d’accès.The length of time, in seconds, that the access token is valid.
access_token Le jeton d’accès demandé.The requested access token. Le service web appelant peut utiliser ce jeton pour s’authentifier auprès du service destinataire.The calling service can use this token to authenticate to the receiving service.
refresh_token Jeton d’actualisation pour le jeton d’accès demandé.The refresh token for the requested access token. Le service appelant peut utiliser ce jeton pour demander un autre jeton d’accès après l’expiration du jeton d’accès actuel.The calling service can use this token to request another access token after the current access token expires. Le jeton d’actualisation est uniquement fourni si l’étendue offline_access a été demandée.The refresh token is only provided if the offline_access scope was requested.

Exemple de réponse correspondant à une réussiteSuccess response example

L’exemple suivant illustre une réponse affirmative à une demande de jeton d’accès pour l’API web https://graph.microsoft.com.The following example shows a success response to a request for an access token for the https://graph.microsoft.com web API.

{
  "token_type": "Bearer",
  "scope": "https://graph.microsoft.com/user.read",
  "expires_in": 3269,
  "ext_expires_in": 0,
  "access_token": "eyJ0eXAiOiJKV1QiLCJub25jZSI6IkFRQUJBQUFBQUFCbmZpRy1tQTZOVGFlN0NkV1c3UWZkQ0NDYy0tY0hGa18wZE50MVEtc2loVzRMd2RwQVZISGpnTVdQZ0tQeVJIaGlDbUN2NkdyMEpmYmRfY1RmMUFxU21TcFJkVXVydVJqX3Nqd0JoN211eHlBQSIsImFsZyI6IlJTMjU2IiwieDV0IjoiejAzOXpkc0Z1aXpwQmZCVksxVG4yNVFIWU8wIiwia2lkIjoiejAzOXpkc0Z1aXpwQmZCVksxVG4yNVFIWU8wIn0.eyJhdWQiOiJodHRwczovL2dyYXBoLm1pY3Jvc29mdC5jb20iLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC83MmY5ODhiZi04NmYxLTQxYWYtOTFhYi0yZDdjZDAxMWRiNDcvIiwiaWF0IjoxNDkzOTMwMzA1LCJuYmYiOjE0OTM5MzAzMDUsImV4cCI6MTQ5MzkzMzg3NSwiYWNyIjoiMCIsImFpbyI6IkFTUUEyLzhEQUFBQU9KYnFFWlRNTnEyZFcxYXpKN1RZMDlYeDdOT29EMkJEUlRWMXJ3b2ZRc1k9IiwiYW1yIjpbInB3ZCJdLCJhcHBfZGlzcGxheW5hbWUiOiJUb2RvRG90bmV0T2JvIiwiYXBwaWQiOiIyODQ2ZjcxYi1hN2E0LTQ5ODctYmFiMy03NjAwMzViMmYzODkiLCJhcHBpZGFjciI6IjEiLCJmYW1pbHlfbmFtZSI6IkNhbnVtYWxsYSIsImdpdmVuX25hbWUiOiJOYXZ5YSIsImlwYWRkciI6IjE2Ny4yMjAuMC4xOTkiLCJuYW1lIjoiTmF2eWEgQ2FudW1hbGxhIiwib2lkIjoiZDVlOTc5YzctM2QyZC00MmFmLThmMzAtNzI3ZGQ0YzJkMzgzIiwib25wcmVtX3NpZCI6IlMtMS01LTIxLTIxMjc1MjExODQtMTYwNDAxMjkyMC0xODg3OTI3NTI3LTI2MTE4NDg0IiwicGxhdGYiOiIxNCIsInB1aWQiOiIxMDAzM0ZGRkEwNkQxN0M5Iiwic2NwIjoiVXNlci5SZWFkIiwic3ViIjoibWtMMHBiLXlpMXQ1ckRGd2JTZ1JvTWxrZE52b3UzSjNWNm84UFE3alVCRSIsInRpZCI6IjcyZjk4OGJmLTg2ZjEtNDFhZi05MWFiLTJkN2NkMDExZGI0NyIsInVuaXF1ZV9uYW1lIjoibmFjYW51bWFAbWljcm9zb2Z0LmNvbSIsInVwbiI6Im5hY2FudW1hQG1pY3Jvc29mdC5jb20iLCJ1dGkiOiJWR1ItdmtEZlBFQ2M1dWFDaENRSkFBIiwidmVyIjoiMS4wIn0.cubh1L2VtruiiwF8ut1m9uNBmnUJeYx4x0G30F7CqSpzHj1Sv5DCgNZXyUz3pEiz77G8IfOF0_U5A_02k-xzwdYvtJUYGH3bFISzdqymiEGmdfCIRKl9KMeoo2llGv0ScCniIhr2U1yxTIkIpp092xcdaDt-2_2q_ql1Ha_HtjvTV1f9XR3t7_Id9bR5BqwVX5zPO7JMYDVhUZRx08eqZcC-F3wi0xd_5ND_mavMuxe2wrpF-EZviO3yg0QVRr59tE3AoWl8lSGpVc97vvRCnp4WVRk26jJhYXFPsdk4yWqOKZqzr3IFGyD08WizD_vPSrXcCPbZP3XWaoTUKZSNJg",
  "refresh_token": "OAQABAAAAAABnfiG-mA6NTae7CdWW7QfdAALzDWjw6qSn4GUDfxWzJDZ6lk9qRw4An{a lot of characters here}"
}

Notes

Le jeton d’accès ci-dessus est un jeton au format v1.0 pour Microsoft Graph.The above access token is a v1.0-formatted token for Microosft Graph. En effet, le format dépend de la ressource consultée et n’est pas lié aux points de terminaison utilisés pour le demander.This is because the token format is based on the resource being accessed and unrelated to the endpoints used to request it. Comme Microsoft Graph est configuré pour accepter des jetons v1.0, la plateforme d’identités Microsoft génère des jetons d’accès v1.0 quand un client demande des jetons pour Microsoft Graph.The Microsoft Graph is setup to accept v1.0 tokens, so Microsoft identity platform produces v1.0 access tokens when a client requests tokens for Microsoft Graph. D’autres applications peuvent indiquer qu’elles veulent des jetons au format v2.0, au format v1.0 ou même dans un format propriétaire ou chiffré.Other apps may indicate that they want v2.0-format tokens, v1.0-format tokens, or even proprietary or encrypted token formats. Les points de terminaison v1.0 et v2.0 peuvent émettre des jetons aux deux formats : ainsi, la ressource reçoit toujours le bon format, quels que soient la façon dont le jeton a été demandé par le client et l’endroit.Both the v1.0 and v2.0 endpoints can emit either format of token - this way the resource can always get the right format of token regardless of how or where the token was requested by the client.

Seules les applications doivent examiner les jetons d’accès.Only applications should look at access tokens. Les clients ne doivent pas les inspecter.Clients must not inspect them. Si vous inspectez les jetons d’accès pour d’autres applications dans votre code, l’application subira une interruption inattendue lorsqu’elle modifiera le format de ses jetons ou commencera à les chiffrer.Inspecting access tokens for other apps in your code will result in your app unexpectedly breaking when that app changes the format of their tokens or starts encrypting them.

Exemple de réponse d’erreurError response example

Une réponse d’erreur est retournée par le point de terminaison du jeton lors de la tentative d’acquisition d’un jeton d’accès pour l’API en aval si une stratégie d’accès conditionnel comme l’authentification multifacteur est définie sur cette API.An error response is returned by the token endpoint when trying to acquire an access token for the downstream API, if the downstream API has a Conditional Access policy (such as multi-factor authentication) set on it. Le service de niveau intermédiaire doit faire apparaître cette erreur à l’application cliente afin que celle-ci puisse fournir une interaction utilisateur pour satisfaire la stratégie d’accès conditionnel.The middle-tier service should surface this error to the client application so that the client application can provide the user interaction to satisfy the Conditional Access policy.

{
    "error":"interaction_required",
    "error_description":"AADSTS50079: Due to a configuration change made by your administrator, or because you moved to a new location, you must enroll in multi-factor authentication to access 'bf8d80f9-9098-4972-b203-500f535113b1'.\r\nTrace ID: b72a68c3-0926-4b8e-bc35-3150069c2800\r\nCorrelation ID: 73d656cf-54b1-4eb2-b429-26d8165a52d7\r\nTimestamp: 2017-05-01 22:43:20Z",
    "error_codes":[50079],
    "timestamp":"2017-05-01 22:43:20Z",
    "trace_id":"b72a68c3-0926-4b8e-bc35-3150069c2800",
    "correlation_id":"73d656cf-54b1-4eb2-b429-26d8165a52d7",
    "claims":"{\"access_token\":{\"polids\":{\"essential\":true,\"values\":[\"9ab03e19-ed42-4168-b6b7-7001fb3e933a\"]}}}"
}

Utiliser le jeton d’accès pour accéder à la ressource sécuriséeUse the access token to access the secured resource

Le service de niveau intermédiaire peut maintenant utiliser le jeton obtenu ci-dessus pour faire des demandes authentifiées à l’API web en aval, en définissant le jeton dans l’en-tête Authorization.Now the middle-tier service can use the token acquired above to make authenticated requests to the downstream web API, by setting the token in the Authorization header.

ExempleExample

GET /v1.0/me HTTP/1.1
Host: graph.microsoft.com
Authorization: Bearer eyJ0eXAiO ... 0X2tnSQLEANnSPHY0gKcgw

Assertions SAML obtenues avec un flux OBO OAuth 2.0SAML assertions obtained with an OAuth2.0 OBO flow

Certains services web basés sur OAuth doivent accéder à d’autres API de service web qui acceptent les instructions d’assertion SAML dans des flux non interactifs.Some OAuth-based web services need to access other web service APIs that accept SAML assertions in non-interactive flows. Azure Active Directory peut fournir une instruction d’assertion SAML en réponse à un flux On-Behalf-Of qui utilise un service web basé sur SAML comme ressource cible.Azure Active Directory can provide a SAML assertion in response to an On-Behalf-Of flow that uses a SAML-based web service as a target resource.

Notes

Il s’agit d’une extension non standard pour le flux On-Behalf-Of OAuth 2.0 qui permet à une application OAuth2 d’accéder aux points de terminaison d’API du service web qui consomment des jetons SAML.This is a non-standard extension to the OAuth 2.0 On-Behalf-Of flow that allows an OAuth2-based application to access web service API endpoints that consume SAML tokens.

Conseil

Quand vous appelez un service web protégé par SAML à partir d’une application web front-end, vous pouvez simplement appeler l’API et lancer un flux d’authentification interactif normal avec la session existante de l’utilisateur.When you call a SAML-protected web service from a front-end web application, you can simply call the API and initiate a normal interactive authentication flow with the user's existing session. Vous devez seulement utiliser un flux OBO quand un appel de service à service nécessite un jeton SAML pour fournir le contexte de l’utilisateur.You only need to use an OBO flow when a service-to-service call requires a SAML token to provide user context.

Selon l’architecture ou l’utilisation de votre application, vous pouvez envisager différentes stratégies pour garantir la réussite du flux OBO.Depending on the architecture or usage of your application, you may consider different strategies for ensuring that the OBO flow is successful. Dans tous les cas, l’objectif ultime est de garantir qu’un consentement formel a été donné pour que l’application cliente puisse appeler l’application de niveau intermédiaire, et que l’application de niveau intermédiaire soit autorisée à appeler la ressource back-end.In all cases, the ultimate goal is to ensure proper consent is given so that the client app can call the middle-tier app, and the middle tier app has permission to call the back-end resource.

Notes

Auparavant, le système de compte Microsoft (comptes personnels) ne prenait pas en charge le champ « Application cliente connue » et n’affichait pas non plus le consentement combiné.Previously the Microsoft account system (personal accounts) did not support the "Known client application" field, nor could it show combined consent. Ces deux fonctionnalités ont été ajoutées et toutes les applications de la plateforme d’identités Microsoft peuvent désormais utiliser l’approche d’application cliente connue pour obtenir le consentement nécessaire aux appels OBO.This has been added and all apps in the Microsoft identity platform can use the known client application approach for getting consent for OBO calls.

L’application de niveau intermédiaire ajoute le client à la liste des applications clientes connues dans son manifeste et le client peut alors déclencher un flux de consentement combiné pour lui-même et l’application de niveau intermédiaire.The middle tier application adds the client to the known client applications list in its manifest, and then the client can trigger a combined consent flow for both itself and the middle tier application. Sur le point de terminaison de la plateforme d’identités Microsoft, l’étendue /.default est utilisée.On the Microsoft identity platform endpoint, this is done using the /.default scope. Lors du déclenchement d’un écran de consentement à l’aide des applications clientes connues et de /.default, l’écran de consentement affiche les autorisations à la fois pour le client et l’API de niveau intermédiaire, et demande également toutes les autorisations exigées par l’API de niveau intermédiaire.When triggering a consent screen using known client applications and /.default, the consent screen will show permissions for both the client to the middle tier API, and also request whatever permissions are required by the middle-tier API. L’utilisateur fournit le consentement pour les deux applications et le flux OBO fonctionne ensuite.The user provides consent for both applications, and then the OBO flow works.

Applications préalablement autoriséesPre-authorized applications

Une ressource peut indiquer qu’une application donnée a toujours l’autorisation de recevoir certaines étendues.Resources can indicate that a given application always has permission to receive certain scopes. Cela est particulièrement utile pour rendre les connexions entre un client front-end et une ressource back-end plus fluides.This is primarily useful to make connections between a front-end client and a back-end resource more seamless. Une ressource peut déclarer plusieurs applications préalablement autorisées : n’importe quelle application de ce type peut demander ces autorisations dans un flux OBO et les recevoir sans que l’utilisateur ne fournisse un consentement.A resource can declare multiple pre-authorized applications - any such application can request these permissions in an OBO flow and receive them without the user providing consent.

Un administrateur de locataire peut garantir que les applications ont l’autorisation d’appeler leurs API requises en fournissant le consentement de l’administrateur pour l’application de niveau intermédiaire.A tenant admin can guarantee that applications have permission to call their required APIs by providing admin consent for the middle tier application. Pour ce faire, l’administrateur peut trouver l’application de niveau intermédiaire dans son locataire, ouvrir la page des autorisations nécessaires et choisir d’accorder l’autorisation pour l’application.To do this, the admin can find the middle tier application in their tenant, open the required permissions page, and choose to give permission for the app. Pour en savoir plus sur le consentement de l’administrateur, consultez la documentation sur le consentement et les autorisations.To learn more about admin consent, see the consent and permissions documentation.

Utilisation d’une application uniqueUse of a single application

Dans certains scénarios, vous pouvez avoir uniquement une seule association d’un client de niveau intermédiaire et d’un client front-end.In some scenarios, you may only have a single pairing of middle-tier and front-end client. Dans ce scénario, il peut s’avérer plus facile d’en faire une seule application, annulant ainsi complètement la nécessité d’une application de niveau intermédiaire.In this scenario, you may find it easier to make this a single application, negating the need for a middle-tier application altogether. Pour l’authentification entre le front-end et l’API web, vous pouvez utiliser des cookies, un jeton id_token ou un jeton d’accès demandé pour l’application elle-même.To authenticate between the front-end and the web API, you can use cookies, an id_token, or an access token requested for the application itself. Demandez ensuite le consentement dans cette application unique à la ressource back-end.Then, request consent from this single application to the back-end resource.

Limitations du clientClient limitations

Si un client utilise le flux implicite pour obtenir un id_token, et que ce client a également des caractères génériques dans une URL de réponse, id_token ne peut pas être utilisé pour un flux OBO.If a client uses the implicit flow to get an id_token, and that client also has wildcards in a reply URL, the id_token can't be used for an OBO flow. Toutefois, les jetons d’accès obtenus via le flux d’octroi implicite peuvent toujours être échangés par un client confidentiel même si le client d’origine a une URL de réponse générique inscrite.However, access tokens acquired through the implicit grant flow can still be redeemed by a confidential client even if the initiating client has a wildcard reply URL registered.

Étapes suivantesNext steps

Découvrez plus d’informations sur le protocole OAuth 2.0 et une autre méthode pour effectuer l’authentification de service à service à l’aide des informations d’identification du client.Learn more about the OAuth 2.0 protocol and another way to perform service to service auth using client credentials.