Scénarios AD FS pour les développeursAD FS Scenarios for Developers

AD FS dans Windows Server 2016 [AD FS 2016] vous permet de peuvent ajouter industry standard OpenID Connect et OAuth 2.0 en fonction d’authentification et autorisation aux applications que vous développez et ces applications authentifier les utilisateurs directement dans AD FS.AD FS in Windows Server 2016 [AD FS 2016] enables you to add industry standard OpenID Connect and OAuth 2.0 based authentication and authorization to applications you are developing, and have those applications authenticate users directly against AD FS.

AD FS 2016 prend également en charge le WS-Trust, WS-Federation et SAML protocoles et les profils de nous avoir pris en charge dans les versions précédentes.AD FS 2016 also supports the WS-Federation, WS-Trust, and SAML protocols and profiles we have supported in previous versions. Si vous vous intéressez dans le Guide du développeur pour ces protocoles, consultez l’article ici.If you are interested in developer guidance for these protocols, see the article here. Cet article se concentrera sur l’utilisation et de tirer parti de la plus récente prise en charge du protocole.This article will focus on how to use and benefit from the newer protocol support.

Pourquoi l’authentification moderneWhy Modern Authentication

Vous pouvez continuer avec AD FS pour l’authentification sur avec WS-Federation, WS-Trust et les protocoles SAML comme vous ont avant, avec les protocoles plus récente, vous bénéficiez des avantages suivants :While you can continue using AD FS for sign on with WS-Federation, WS-Trust, and SAML protocols just as you have before, with the newer protocols, you get the following benefits:

  • Simplicité et cohérenceSimplicity and consistency
    • Utilisez le même ensemble d’API et de modèles pour activer l’authentification pour :Use the same set of APIs and patterns to enable sign on for:
      • plusieurs types d’applications (serveur, de bureau, mobile, navigateur)multiple types of applications (server, desktop, mobile, browser)
      • plusieurs plateformes (android, iOS, Windows)multiple platforms (android, iOS, Windows)
      • applications à l’intérieur du réseau d’entreprise soit hébergé dans le cloudapplications inside the corporate network or hosted in the cloud
    • Utiliser le même ensemble de bibliothèques, que vous pouvez déjà utiliser pour authentifier les utilisateurs auprès d’Azure ADUse the same set of libraries you can already use to authenticate users against Azure AD
  • FlexibilitéFlexibility
    • En plus de l’autorisation de l’utilisateur standard, activer des scénarios plus complexes telles que :In addition to standard user authorization, enable more complex scenarios such as:
      • ?? connexion en 3 étapes sur les flux dans lequel un utilisateur autorise une application web ou service pour accéder aux ressources qui se trouvent avec une autre application web ou service.3-legged sign on flows in which a user authorizes one web application or service to access resources that reside with another web app or service.
      • ?? Flux de serveur à serveur dans lequel un service de niveau intermédiaire accède à un backend d’APIServer-to-server flows in which a mid-tier service accesses a back end API
      • ?? Applications à page unique (SPA) basé sur JavaScriptJavaScript based single-page applications (SPA)
  • Prise en chargeIndustry support
    • OAuth 2.0 et OpenID Connect profiter de l’utilisation de du secteur, afin de la base de connaissances de ces modèles vous aideront à activer l’authentification et l’autorisation en dehors d’un environnement Active Directory, ainsiOAuth 2.0 and OpenID Connect enjoy wide utilization across the industry, so knowledge of these patterns will help you enable authentication and authorization outside of an Active Directory environment as well

Fonctionnement : Les principes de baseHow it works: The Basics

Vous pouvez ajouter l’authentification moderne AD FS à votre application en utilisant le même ensemble d’outils et bibliothèques que vous pouvez déjà utiliser pour authentifier les utilisateurs auprès d’Azure AD.You can add AD FS modern authentication to your application using the same set of tools and libraries you can already use to authenticate users against Azure AD.

Dans les scénarios AD FS, bien sûr, il est AD FS et pas Azure AD qui sert de fournisseur d’identité et d’autorisation serveur.In AD FS scenarios of course, it is AD FS and not Azure AD that serves as the identity provider and authorization server. Sinon, les concepts sont exactement les mêmes : les utilisateurs fournissent leurs informations d’identification et obtenir des jetons, directement ou via un intermédiaire, pour accéder aux ressources.Otherwise the concepts are exactly the same: users provide their credentials and obtain tokens, either directly or via an intermediary, for access to resources.

Le scénario plus simple se compose d’un utilisateur ou le « propriétaire de ressource », interagir avec un navigateur pour accéder à une application web :The most basic scenario consists of a user or "resource owner", interacting with a browser to access a web application:

AD FS pour les développeurs

L’application web est appelée un « client », car il initie la demande au serveur d’autorisation (AD FS) pour un jeton d’accès à la ressource.The web application is called a "client" because it initiates the request to the authorization server (AD FS) for an access token to the resource. La ressource peut être hébergée par l’application web elle-même ou peut être accessible en tant qu’une API web quelque part sur le réseau ou internet.The resource may be hosted by the web app itself or may be accessible as a web API somewhere on the network or internet. L’utilisateur ou le « propriétaire de ressource » autorise l’application web cliente pour recevoir ce jeton d’accès en fournissant des informations d’identification pour le serveur d’autorisation.The user or "resource owner" authorizes the client web app to receive that access token by providing credentials to the authorization server.

Comment cela fonctionne : composantsHow it works: components

OAuth 2.0 et OpenID Connect de scénarios dans Assurez-vous d’AD FS utilisent le même ensemble d’outils et bibliothèques que vous utilisez lorsque Azure AD est le fournisseur d’identité.OAuth 2.0 and OpenID Connect scenarios in AD FS make use of the same set of tools and libraries you use when Azure AD is the identity provider. Ces composants sont :These components are:

  • Active Directory Authentication Library (ADAL) : les bibliothèques clientes qui facilitent collecte les informations d’identification de l’utilisateur, la création et envoi de demandes de jeton et récupérer les jetons générés.Active Directory Authentication Library (ADAL): client libraries that facilitate collecting user credentials, creating and submitting token requests and retrieving the resulting tokens.
  • Intergiciel OWIN (Open Web Interface pour .NET) : OWIN est un projet de la Communauté, Microsoft a créé un ensemble de bibliothèques de côté serveur pour la protection des applications web et API web avec OpenID Connect et OAuth 2.0OWIN (Open Web Interface for .NET) middleware: While OWIN is a community based project, Microsoft has created a set of server side libraries that for protecting web applications and web APIs with OpenID Connect and OAuth 2.0

Les rôles de ces composants sont affichés dans le diagramme ci-dessous :The roles of these components are shown in the diagram below:

AD FS pour les développeurs

Ces scénarios de modélisation dans AD FS 2016Modeling these scenarios in AD FS 2016

Groupes d’applicationsApplication Groups

Pour représenter ces scénarios dans la stratégie d’AD FS, nous avons introduit un nouveau concept appelé des groupes d’applications.To represent these scenarios in AD FS policy, we have introduced a new concept called Application Groups. Un groupe d’applications peut contenir n’importe quel nombre et la combinaison des types fondamentaux suivants de l’application :An application group can contain any number and combination of the following fundamental types of application:

Groupe d’applications / Type d’ApplicationApplication Group / Application Type DescriptionDescription RôleRole
Application nativeNative application Parfois appelé un client public, doit être une application cliente qui s’exécute sur un pc ou un appareil et avec lesquels l’utilisateur interagit.Sometimes called a public client, this is intended to be a client app that runs on a pc or device and with which the user interacts. Demande de jetons à partir du serveur d’autorisation (AD FS) pour l’accès utilisateur aux ressources.Requests tokens from the authorization server (AD FS) for user access to resources. Envoie des requêtes HTTP à des ressources protégées, l’aide des jetons en tant qu’en-têtes HTTP.Sends HTTP requests to protected resources, using the tokens as HTTP headers.
Application serveurServer application Une application web qui s’exécute sur un serveur et est généralement accessibles aux utilisateurs via un navigateur.A web application that runs on a server and is generally accessible to users via a browser. Comme il est capable de maintenir son propre « question secrète du client » ou les informations d’identification, il est parfois appelé un client confidentiel.Because it is capable of maintaining its own client 'secret' or credential, it is sometimes called a confidential client. Demande de jetons à partir du serveur d’autorisation (AD FS) pour l’accès utilisateur aux ressources.Requests tokens from the authorization server (AD FS) for user access to resources. Envoie des requêtes HTTP à des ressources protégées, l’aide des jetons en tant qu’en-têtes HTTP.Sends HTTP requests to protected resources, using the tokens as HTTP headers.
API WebWeb API Accède à la ressource de fin l’utilisateur.The end resource the user is accessing. Vous pouvez les considérer comme la nouvelle représentation « des parties de confiance ».Think of these as the new representation of "relying parties". Utilise des jetons obtenus par les clientsConsumes tokens obtained by clients

Différences par rapport à AD FS 2012 R2Differences from AD FS 2012 R2

Application combinent les éléments de confiance et d’autorisation AD FS 2012 R2 exposées séparément, en tant que parties de confiance, les clients et les autorisations d’application.Application groups combine trust and authorization elements that AD FS 2012 R2 exposed separately, as relying parties, clients, and application permissions.

Les tableaux ci-dessous comparent les méthodes par lequel les objets d’approbation application correspondants sont créés dans AD FS 2012 R2 vs AD FS 2016 :The following tables compares the methods by which corresponding application trust objects are created in AD FS 2012 R2 vs AD FS 2016:

AD FS dans Windows Server 2012 R2AD FS in Windows Server 2012 R2 Dans PowerShellIn PowerShell Gestion AD FSAD FS Management
Ajouter un client natifAdd native client Add-AdfsClientAdd-AdfsClient N/ANA
Ajouter l’application de serveur en tant que clientAdd server application as client Add-AdfsClientAdd-AdfsClient N/ANA
Ajouter des API Web / ressourcesAdd Web API / resource Add-AdfsRelyingPartyTrustAdd-AdfsRelyingPartyTrust Créer la partie de confianceCreate Relying Party Trust
AD FS 2016AD FS 2016 Dans PowerShellIn PowerShell Gestion AD FSAD FS Management
Ajouter un client natifAdd native client Add-AdfsNativeClientApplicationAdd-AdfsNativeClientApplication Ajouter un groupe d’Application à l’Application NativeAdd Native Application to Application Group
Ajouter l’application de serveur en tant que clientAdd server application as client Add-AdfsServerApplicationAdd-AdfsServerApplication Ajouter un groupe à une Application de serveurAdd Server Application to Application Group
Ajouter des API Web / ressourcesAdd Web API / resource Add-AdfsWebApiApplicationAdd-AdfsWebApiApplication Ajouter un groupe d’Application à l’Application Web APIAdd Web API Application to Application Group

Par défaut, les clients dans un groupe d’applications sont autorisés à accéder aux ressources dans le même groupe.By default, the clients in an application group are allowed to access the resources in the same group. L’administrateur n’a pas configurer les autorisations d’application spécifique.The administrator does not have to configure specific application permissions. Groupes d’applications permettent également aux administrateurs de spécifier les étendues autorisées, tels qu’openid ou user_impersonation.Application groups also allow administrators to specify the scopes allowed, such as openid or user_impersonation. Les descriptions de scénario ci-dessous spécifient exactement les étendues qui sont requis pour le scénario.The scenario descriptions below specify exactly which scopes are required for which scenario.

Étant donné que AD FS utilise un modèle de consentement de l’administrateur, les utilisateurs n’êtes pas invités à fournir son consentement lors de l’accès aux ressources.Because AD FS uses a model of administrator consent, users are not prompted for consent when accessing resources. En configurant le groupe d’applications, l’administrateur fournit en effet consentement pour le compte de tous les utilisateurs de l’application.By configuring the application group, the administrator in effect provides consent on behalf of all application users.

Scénarios pris en chargeSupported Scenarios

La section suivante décrit les scénarios que nous prenons en charge plus en détail.The following section describes the scenarios we support in more detail.

Jetons utilisésTokens used

Ces scénarios utilisent trois types de jeton :These scenarios make use of three token types:

  • id_token: Un jeton JWT est utilisé pour représenter l’identité de l’utilisateur.id_token: A JWT token used to represent the identity of the user. La revendication « aud » ou audience du jeton id_token correspond à l’ID de client de l’application native ou serveur.The 'aud' or audience claim of the id_token matches the client ID of the native or server application.
  • access_token: Un jeton JWT utilisé dans Oauth et OpenID connectent des scénarios et destinés à être consommés par la ressource.access_token: A JWT token used in Oauth and OpenID connect scenarios and intended to be consumed by the resource. La revendication « aud » ou audience de ce jeton doit correspondre à l’identificateur de la ressource ou l’API Web.The 'aud' or audience claim of this token must match the identifier of the resource or Web API.
  • refresh_token: Ce jeton est soumis à la place de la collecte des informations d’identification de l’utilisateur pour fournir une authentification unique sur l’expérience.refresh_token: This token is submitted in place of collecting user credentials to provide a single sign on experience. Ce jeton est émis et consommé par AD FS et n’est pas lisible par les clients ou des ressources.This token is both issued and consumed by AD FS, and is not readable by clients or resources.

Native client pour l’API WebNative client to Web API

Ce scénario permet à l’utilisateur d’une application cliente native pour appeler une API Web de 2016 protégé par AD FS.This scenario enables the user of a native client application to call an AD FS 2016 protected Web API.

  • L’application cliente native utilise ADAL pour envoyer d’autorisation et le jeton de demande aux services AD FS, demande d’informations d’identification de l’utilisateur en fonction des besoins, puis envoie le jeton résultant comme en-tête HTTP sur la demande à l’API WebThe native client application uses ADAL to send authorization and token requests to AD FS, prompting for credentials from the user as necessary, then sends the resulting token as an HTTP header on the request to the Web API
  • [Cette partie est uniquement à des fins de démonstration] L’API web lit les revendications à partir de l’objet ClaimsPrincipal qui a obtenu le jeton d’accès envoyé par le client et les envoie au client.[This part is for demonstration purposes only] The web API reads the claims from the ClaimsPrincipal object that results from the access token sent by the client, and sends them back to the client.

Description du flux du protocole

  1. L’application cliente native lance le flux avec un appel à la bibliothèque ADAL.The native client application initiates the flow with a call to the ADAL library. Cela déclenche un basée sur un navigateur HTTP GET pour les services AD FS d’Autoriser le point de terminaison :This triggers a browser based HTTP GET to the AD FS authorize endpoint:

Demande d’autorisation :Authorization request:
TÉLÉCHARGER https://fs.contoso.com/adfs/oauth2/authorize?GET https://fs.contoso.com/adfs/oauth2/authorize?

ParamètreParameter ValueValue
response_typeresponse_type « code »"code"
resourceresource ID de fournisseur de ressources (identificateur) de l’API Web dans le groupe d’applicationsRP ID (Identifier) of Web API in application group
client_idclient_id Id client de l’application native dans le groupe d’applicationsclient Id of the native application in the application group
redirect_uriredirect_uri URI de redirection de l’application native dans le groupe d’applicationsRedirect URI of native application in application group

Réponse de demande d’autorisation :Authorization request response:
Si l’utilisateur n’a pas été signé avant que l’utilisateur est invité à entrer des informations d’identification.If the user has not signed in before, the user is prompted for credentials.
AD FS répond en retournant un code d’autorisation en tant que le paramètre « code » dans le composant de requête du redirect_uri.AD FS responds by returning an authorization code as the "code" parameter in the query component of the redirect_uri. Exemple : HTTP/1.1 302 trouvé l’emplacement : http://redirect_uri:80/?code=<code>.For example: HTTP/1.1 302 Found Location: http://redirect_uri:80/?code=<code>.

  1. Le client natif envoie ensuite le code, ainsi que les paramètres suivants, au point de terminaison de jeton AD FS :The native client then sends the code, along with the following parameters, to the AD FS token endpoint:

Demande de jeton :Token Request:
POST https://fs.contoso.com/adfs/oauth2/tokenPOST https://fs.contoso.com/adfs/oauth2/token

ParamètreParameter ValueValue
grant_typegrant_type "authorization_code""authorization_code"
codecode code d’autorisation à partir de 1authorization code from 1
resourceresource ID de fournisseur de ressources (identificateur) de l’API Web dans le groupe d’applicationsRP ID (Identifier) of Web API in application group
client_idclient_id Id client de l’application native dans le groupe d’applicationsclient Id of the native application in the application group
redirect_uriredirect_uri URI de redirection de l’application native dans le groupe d’applicationsRedirect URI of native application in application group

Réponse de demande de jeton :Token request response:
AD FS répond avec HTTP 200 avec le jeton d’accès, jeton d’actualisation et le jeton id_token dans le corps.AD FS responds with an HTTP 200 with the access_token, refresh_token, and id_token in the body.

  1. L’application native puis envoie la partie du jeton d’accès de la réponse ci-dessus en tant que l’en-tête d’autorisation dans la requête HTTP à l’API web.The native application then sends the access_token part of the above response as the Authorization header in the HTTP request to the web API.

Comportement de l’authentification uniqueSingle sign on behavior

Suivantes du client demande au sein de 1 heure (par défaut) le jeton d’accès seront encore valides dans le cache, et une nouvelle demande ne déclenche pas tout le trafic vers AD FS.Subsequent client requests within 1 hour (by default) the access_token will still be valid in the cache, and a new request will not trigger any traffic to AD FS. Le jeton d’accès est automatiquement extraite à partir du cache par la bibliothèque ADAL.The access_token will automatically be fetched from the cache by ADAL.

Une fois que le jeton d’accès expire, la bibliothèque ADAL envoie automatiquement une demande en jetons d’actualisation pour le point de terminaison jeton AD FS (ignorer la demande d’autorisation automatiquement).After the access token expires, ADAL will automatically send a refresh token based request to the AD FS token endpoint (skipping the authorization request automatically).
Demande de jeton d’actualisation :Refresh token request:
POST https://fs.contoso.com/adfs/oauth2/tokenPOST https://fs.contoso.com/adfs/oauth2/token

ParamètreParameter ValueValue
grant_typegrant_type "refresh_token""refresh_token"
resourceresource ID de fournisseur de ressources (identificateur) de l’API Web dans le groupe d’applicationsRP ID (Identifier) of Web API in application group
client_idclient_id Id client de l’application native dans le groupe d’applicationsclient Id of the native application in the application group
refresh_tokenrefresh_token le jeton d’actualisation émis par AD FS en réponse à la demande de jeton initialethe refresh token issued by AD FS in response to the initial token request

Réponse de demande de jeton d’actualisation :Refresh token request response:
Si le jeton d’actualisation se trouve dans < SSO_period >, la demande entraîne un nouveau jeton d’accès.If the refresh token is within <SSO_period>, the request will result in a new access token. L’utilisateur n’est pas invité pour les informations d’identification.The user is not prompted for credentials. Pour plus d’informations sur les paramètres, consultez SSO AD FS Single Sign On SettingsFor more information on SSO settings see AD FS Single Sign On Settings

Si le jeton d’actualisation a expiré, la demande entraîne un HTTP 401 avec l’erreur « invalid_grant » et « error_description » « MSIS9615 : Le jeton d’actualisation reçu dans le paramètre de jeton d’actualisation a expiré ».If the refresh token has expired, the request results in an HTTP 401 with error "invalid_grant" and "error_description" "MSIS9615: The refresh token received in refresh_token parameter has expired". Dans ce cas, la bibliothèque ADAL envoie automatiquement une nouvelle demande d’autorisation qui ressemble à #1 ci-dessus.In this case, ADAL automatically submits a new authorization request that looks just like #1 above.

Navigateur Web à l’application WebWeb Browser to Web App

Dans ce scénario, un utilisateur avec un navigateur doit accéder aux ressources hébergées par une application web.In this scenario, a user with a browser needs to access resources hosted by a web application.
Il existe deux scénarios qui effectuent cette opération.There are two scenarios that accomplish this.

Client confidentiel OAuthOauth confidential client

Ce scénario est semblable à celle ci-dessus dans qu’il existe une demande d’autorisation, suivie d’un code pour l’échange de jeton.This scenario is similar to the above in that there is an authorization request, followed by a code for token exchange. Lance la demande d’autorisation via le navigateur de l’application web (modélisée comme une Application de serveur dans AD FS) et échange le code pour le jeton (en connectant directement à AD FS)The web app (modeled as a Server Application in AD FS) initiates the authorization request via the browser and exchanges the code for the token (by connecting directly to AD FS)

Description du flux du protocole

  1. Le lance d’application Web une autorisation demande via le navigateur, qui envoie une requête HTTP GET pour les services AD FS autorise le point de terminaisonThe Web App initiates an authorization request via the browser, which sends an HTTP GET to the AD FS authorize endpoint
    Demande d’autorisation:Authorization request:
    TÉLÉCHARGER https://fs.contoso.com/adfs/oauth2/authorize?GET https://fs.contoso.com/adfs/oauth2/authorize?
ParamètreParameter ValueValue
response_typeresponse_type « code »"code"
resourceresource ID de fournisseur de ressources (identificateur) de l’API Web dans le groupe d’applicationsRP ID (Identifier) of Web API in application group
client_idclient_id Id client de l’application native dans le groupe d’applicationsClient Id of the native application in the application group
redirect_uriredirect_uri URI de redirection de l’application web (application serveur) dans le groupe d’applicationsRedirect URI of web app (server application) in application group

Réponse de demande d’autorisation :Authorization request response:
Si l’utilisateur n’a pas été signé avant que l’utilisateur est invité à entrer des informations d’identification.If the user has not signed in before, the user is prompted for credentials.
AD FS répond en retournant un code d’autorisation en tant que le paramètre « code » dans le composant de requête du redirect_uri, par exemple : HTTP/1.1 302 trouvé l’emplacement : https://webapp.contoso.com/?code=&lt;code&gt;.AD FS responds by returning an authorization code as the "code" parameter in the query component of the redirect_uri, for example: HTTP/1.1 302 Found Location: https://webapp.contoso.com/?code=&lt;code&gt;.

  1. À la suite la 302 ci-dessus, le navigateur démarre une opération HTTP GET à l’application web, par exemple : GET http://redirect_uri:80/?code=&lt;code&gt;.As a result of the above 302, the browser initiates an HTTP GET to the web app, for example: GET http://redirect_uri:80/?code=&lt;code&gt;.

  2. À ce stade l’application web, ayant reçu le code, lance une demande d’AD FS point de terminaison token, envoyer les éléments suivantsAt this point the web app, having received the code, initiates a request to the AD FS token endpoint, sending the following
    Demande de jeton :Token request:
    POST https://fs.contoso.com/adfs/oauth2/tokenPOST https://fs.contoso.com/adfs/oauth2/token

ParamètreParameter ValueValue
grant_typegrant_type "authorization_code""authorization_code"
codecode code d’autorisation à partir de 2 ci-dessusauthorization code from 2 above
resourceresource ID de fournisseur de ressources (identificateur) de l’API Web dans le groupe d’applicationsRP ID (Identifier) of Web API in application group
client_idclient_id Id de client de l’application web (application serveur) dans le groupe d’applicationsClient Id of the web app (server application) in the application group
redirect_uriredirect_uri URI de redirection de l’application web (application serveur) dans le groupe d’applicationsRedirect URI of web app (server application) in application group
client_secretclient_secret Clé secrète de l’application web (application serveur) dans le groupe d’applications.Secret of the web app (server application) in the application group. Remarque : Informations d’identification du client n’a pas besoin être un client_secret. AD FS prend en charge la possibilité d’utiliser également des certificats ou l’authentification intégrée de Windows.Note: The client's credential does not need to be a client_secret. AD FS supports the ability to use certificates or Windows Integrated Authentication as well.

Réponse de demande de jeton :Token request response:
AD FS répond avec HTTP 200 avec le jeton d’accès, jeton d’actualisation et le jeton id_token dans le corps.AD FS responds with an HTTP 200 with the access_token, refresh_token, and id_token in the body.
claimsclaims
4. Le web application puis soit consomme la partie du jeton d’accès de la réponse ci-dessus (dans le cas dans lequel l’application web elle-même héberge la ressource), ou envoie sous forme de l’en-tête d’autorisation dans la requête HTTP à l’API web.The web application then either consumes the access_token part of the above response (in the case in which the web app itself hosts the resource), or otherwise sends it as the Authorization header in the HTTP request to the web API.

Comportement de l’authentification uniqueSingle sign on behavior

Bien que le jeton d’accès sera toujours valid pendant 1 heure (par défaut) dans le cache du client, vous pouvez penser que la deuxième demande fonctionnera comme dans le scénario de client natif ci-dessus - qu’une nouvelle demande ne déclenche pas tout le trafic aux services AD FS comme le jeton d’accès sera automatiquement être extraites à partir du cache par la bibliothèque ADAL.While the access token will still be valid for 1 hour (by default) in the client's cache, you may think that the second request will work as in the native client scenario above - that a new request will not trigger any traffic to AD FS as the access token will automatically be fetched from the cache by ADAL. Toutefois, il est possible que l’application web peut envoyer d’autorisation distincte et demandes de jeton, l’ancienne base de données via des liens URL distinctes, comme dans notre exemple.However, it is possible that the web app can send distinct authorization and token requests, the former via distinct URL link, as in our sample.

Dans ce cas, il est le cookie d’authentification unique de navigateur AD FS qui permet à AD FS émettre un nouveau code d’autorisation sans solliciter l’utilisateur pour les informations d’identification.In this case, it is the AD FS browser SSO cookie that enables AD FS to issue a new authorization code without prompting the user for credentials. L’application web appelle ensuite à AD FS pour échanger le nouveau code d’autorisation pour un nouveau jeton d’accès.The web app then calls to AD FS to exchange the new authorization code for a new access token. L’utilisateur n’est pas invité pour les informations d’identification.The user is not prompted for credentials.

Sinon, si l’application web est actives suffisant de savoir que si l’utilisateur est déjà authentifié, la demande authorize peut être ignorée et la valeur :Otherwise, if the web app is smart enough to know if the user is already authenticated, the authorize request can be skipped and either:

  • le jeton d’accès mis en cache, si ne pas expiré, est récupéré et utilisé, outhe cached access token, if not expired, is retrieved and used, or
  • une demande d’en jeton de demande peut être envoyée au point de terminaison de jeton de AD FS, comme décrit ci-dessousa request token based request can be sent to the AD FS token endpoint, as described below

Demande de jeton d’actualisation :Refresh token request:
POST https://fs.contoso.com/adfs/oauth2/tokenPOST https://fs.contoso.com/adfs/oauth2/token

ParamètreParameter ValueValue
grant_typegrant_type "refresh_token""refresh_token"
resourceresource ID de fournisseur de ressources (identificateur) de l’API Web dans le groupe d’applicationsRP ID (Identifier) of Web API in application group
client_idclient_id Id de client de l’application web (application serveur) dans le groupe d’applicationsClient Id of the web app (server application) in the application group
refresh_tokenrefresh_token Actualiser le jeton émis par AD FS en réponse à la demande de jeton initialeRefresh token issued by AD FS in response to the initial token request
client_secretclient_secret Secret de l’application web (application serveur) dans le groupe d’applicationsSecret of the web app (server application) in the application group

Réponse de demande de jeton d’actualisation :Refresh token request response:
Si le jeton d’actualisation se trouve dans < SSO_period >, la demande entraîne un nouveau jeton d’accès.If the refresh token is within <SSO_period>, the request will result in a new access token. L’utilisateur n’est pas invité pour les informations d’identification.The user is not prompted for credentials. Pour plus d’informations sur les paramètres, consultez SSO AD FS Single Sign On SettingsFor more information on SSO settings see AD FS Single Sign On Settings

Si le jeton d’actualisation a expiré, la demande entraîne un HTTP 401 avec l’erreur « invalid_grant » et « error_description » « MSIS9615 : Le jeton d’actualisation reçu dans le paramètre de jeton d’actualisation a expiré ».If the refresh token has expired, the request results in an HTTP 401 with error "invalid_grant" and "error_description" "MSIS9615: The refresh token received in refresh_token parameter has expired". Dans ce cas, la bibliothèque ADAL envoie automatiquement une nouvelle demande d’autorisation qui ressemble à #1 ci-dessus.In this case, ADAL automatically submits a new authorization request that looks just like #1 above.

OpenID Connect : Flux hybrideOpenID Connect: Hybrid flow

Ce scénario est semblable à celle ci-dessus dans qui il est une demande d’autorisation lancée par l’application web via la redirection du navigateur et un code pour l’échange de jeton à partir de l’application web AD FS.This scenario is similar to the above in that there is an authorization request initiated by the web app via browser redirect, and a code for token exchange from the web app to AD FS. La différence dans ce scénario est que AD FS émet un jeton id_token en tant que partie de la réponse de demande d’autorisation initiale.The difference in this scenario is that AD FS issues an id_token as part of the initial authorization request response.

Description du flux du protocole

  1. Le lance d’application Web une autorisation demande via le navigateur, qui envoie une requête HTTP GET pour les services AD FS autorise le point de terminaisonThe Web App initiates an authorization request via the browser, which sends an HTTP GET to the AD FS authorize endpoint

Demande d’autorisation :Authorization request:
TÉLÉCHARGER https://fs.contoso.com/adfs/oauth2/authorize?GET https://fs.contoso.com/adfs/oauth2/authorize?

ParamètreParameter ValueValue
response_typeresponse_type "code+id_token""code+id_token"
response_moderesponse_mode "form_post""form_post"
resourceresource ID de fournisseur de ressources (identificateur) de l’API Web dans le groupe d’applicationsRP ID (Identifier) of Web API in application group
client_idclient_id Id de client de l’application web (application serveur) dans le groupe d’applicationsClient Id of the web app (server application) in the application group
redirect_uriredirect_uri URI de redirection de l’application web (application serveur) dans le groupe d’applicationsRedirect URI of web app (server application) in the application group

Réponse de demande d’autorisation :Authorization request response:
Si l’utilisateur n’a pas été signé avant que l’utilisateur est invité à entrer des informations d’identification.If the user has not signed in before, the user is prompted for credentials.
AD FS répond avec un HTTP 200 et le formulaire contenant le ci-dessous comme masqué éléments :AD FS responds with an HTTP 200 and form containing the below as hidden elements:

  • code : le code d’autorisationcode: the authorization code
  • id_token : un jeton Web JSON contenant des revendications qui décrivent l’authentification utilisateurid_token: a JWT token containing claims describing the user authentication
  • Le formulaire publie automatiquement à l’URI de redirection de l’application web, en envoyant le code et le paramètre id_token à l’application web.The form automatically posts to the redirect_uri of the web app, sending the code and the id_token to the web app.
  1. À ce stade l’application web, ayant reçu le code, lance une demande d’AD FS point de terminaison token, envoyer les éléments suivantsAt this point the web app, having received the code, initiates a request to the AD FS token endpoint, sending the following

Demande de jeton :Token request:
POST https://fs.contoso.com/adfs/oauth2/tokenPOST https://fs.contoso.com/adfs/oauth2/token

ParamètreParameter ValueValue
grant_typegrant_type "authorization_code""authorization_code"
codecode code d’autorisation à partir du hautauthorization code from above
resourceresource ID de fournisseur de ressources (identificateur) de l’API Web dans le groupe d’applicationsRP ID (Identifier) of Web API in application group
client_idclient_id Id de client de l’application web (application serveur) dans le groupe d’applicationsClient Id of the web app (server application) in the application group
redirect_uriredirect_uri URI de redirection de l’application web (application serveur) dans le groupe d’applicationsRedirect URI of web app (server application) in application group
client_secretclient_secret Secret de l’application web (application serveur) dans le groupe d’applicationsSecret of the web app (server application) in the application group

Réponse de demande de jeton :Token request response:
AD FS répond avec HTTP 200 avec le jeton d’accès, jeton d’actualisation et le jeton id_token dans le corps.AD FS responds with an HTTP 200 with the access_token, refresh_token, and id_token in the body.

  1. Le web application puis soit consomme la partie du jeton d’accès de la réponse ci-dessus (dans le cas dans lequel l’application web elle-même héberge la ressource), ou envoie sous forme de l’en-tête d’autorisation dans la requête HTTP à l’API web.The web application then either consumes the access_token part of the above response (in the case in which the web app itself hosts the resource), or otherwise sends it as the Authorization header in the HTTP request to the web API.

Comportement de l’authentification uniqueSingle Sign on behavior

La comportement de l’authentification unique est la même que pour le flux de client confidentiel Oauth 2.0 ci-dessus.The single sign on behavior is the same as for the Oauth 2.0 confidential client flow above.

Pour le compte deOn Behalf Of

Dans ce scénario, une application web utilise le jeton d’accès d’origine à partir d’un utilisateur pour demander et d’obtenir un autre jeton d’accès pour une autre API Web, auquel l’application web sera accéder ensuite que l’utilisateur final.In this scenario, a web app uses the original access token from a user to request and obtain another access token for another Web API, which the web app will then access as the end user. Il s’agit d’un flux « de la part de ».This is called an "on behalf of" flow.

Description du flux du protocole

Les étapes 1 et 2 fonctionnent comme étapes 3 et 4 dans le flux précédent.Steps 1 and 2 work just like steps 3 and 4 in the previous flow.
À l’étape 3, la condition principale est que le paramètre client_id, l’ID client de l’application Web 2, doit correspondre à l’ID de fournisseur de ressources de Web API A. En d’autres termes, l’audience du jeton échangé pour le nouveau jeton d’accès doit correspondre à l’ID client de l’entité qui demande le nouveau jeton.In Step 3, the key requirement is that the client_id parameter, the client ID of the Web app 2, must match the RP ID of Web API A. In other words, the audience of the access token being exchanged for the new token must match the client ID of the entity requesting the new token.

Consultez AD FS développement pour obtenir la liste complète des articles de procédure pas à pas, qui fournissent des instructions détaillées sur l’utilisation des flux associés.See AD FS Development for the complete list of walk-through articles, which provide step-by-step instructions on using the related flows.