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

S’applique à: Windows Server2016Applies To: Windows Server 2016

AD FS dans Windows Server 2016 [AD FS 2016] vous permet ajouter industry standard connecter d’OpenID et OAuth 2.0 en fonction d’authentification et autorisation pour les applications que vous développez et avoir 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 la 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 êtes intéressé par des conseils de développement de ces protocoles, voir 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 bénéficier de la prise en charge du protocole plus récente.This article will focus on how to use and benefit from the newer protocol support.

Pourquoi l’authentification moderneWhy Modern Authentication

Pendant que vous pouvez continuer à l’aide de AD FS pour l’authentification sur avec WS-Federation, WS-Trust et les protocoles SAML exactement comme vous ont auparavant, les protocoles plus récents, 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 la cohérenceSimplicity and consistency
    • Utilisez le même ensemble d’API et 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, bureau, mobile, navigateur)multiple types of applications (server, desktop, mobile, browser)
      • plusieurs plateformes (android, iOS et Windows)multiple platforms (android, iOS, Windows)
      • les applications à l’intérieur du réseau d’entreprise ou 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 utiliser déjà pour authentifier les utilisateurs par rapport à Azure ADUse the same set of libraries you can already use to authenticate users against Azure AD
  • FlexibilitéFlexibility
    • Outre l’autorisation utilisateur standard, activer des scénarios plus complexes telles que:In addition to standard user authorization, enable more complex scenarios such as:
      • ?? connexion à 3 branches sur les flux dans lequel un utilisateur autorise une application web ou un service pour accéder aux ressources qui se trouvent avec une autre application web ou un 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 milieu accède aux API principaleServer-to-server flows in which a mid-tier service accesses a back end API
      • ?? JavaScript en fonction des applications à page unique (SPA)JavaScript based single-page applications (SPA)
  • Prise en chargeIndustry support
    • 2.0 OAuth et OpenID connecter profiter de l’utilisation dans toute l’industrie, afin de la base de connaissances de ces modèles vous permettra d’activer l’authentification et 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: notions 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 de bibliothèques, que vous pouvez utiliser déjà pour authentifier les utilisateurs par rapport à 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 entendu, 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. Dans le cas contraire les concepts sont identiques: 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 est constitué d’un utilisateur ou le «propriétaire de la ressource «, interaction 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 requête au serveur d’autorisation (Active Directory Federation Services) 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 lui-même ou peut-être ê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 la ressource» autorise l’application web de client 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.

Fonctionnement: composantsHow it works: components

OAuth 2.0 OpenID connecter scénarios et marque AD FS utilisent le même ensemble d’outils et de bibliothèques 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:

  • Bibliothèque d’authentification Active Directory (ADAL): les bibliothèques clientes qui facilitent collecte des informations d’identification de l’utilisateur, la création et soumettre des demandes de jeton et récupérer les jetons qui en résulte.Active Directory Authentication Library (ADAL): client libraries that facilitate collecting user credentials, creating and submitting token requests and retrieving the resulting tokens.
  • Intergiciels (middleware) OWIN (Open Interface Web pour .NET): alors que OWIN est un projet en fonction de la Communauté, Microsoft a créé un ensemble de serveur côté bibliothèques pour protéger les applications et web API avec connecter OpenID 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 d’application fondamentaux suivants: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, ceci vise à être une application cliente qui s’exécute sur un pc ou un périphérique et avec lequel 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. Jetons de demandes à partir du serveur d’autorisation (Active Directory Federation Services) 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, en utilisant les jetons comme les 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 accessible aux utilisateurs via un navigateur.A web application that runs on a server and is generally accessible to users via a browser. Dans la mesure où il est capable de maintenir son propre secret «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. Jetons de demandes à partir du serveur d’autorisation (Active Directory Federation Services) 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, en utilisant les jetons comme les 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 d’AD FS 2012 R2Differences from AD FS 2012 R2

Groupes d’applications combinent des éléments de confiance et d’autorisation qui AD FS 2012 R2 exposés 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.

Le tableau suivant compare 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 le client natifAdd native client AdfsClient ajouterAdd-AdfsClient NANA
Ajouter l’application serveur en tant que clientAdd server application as client AdfsClient ajouterAdd-AdfsClient NANA
Ajouter des API Web / ressourceAdd Web API / resource Ajouter-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 le client natifAdd native client AdfsNativeClientApplication ajouterAdd-AdfsNativeClientApplication Ajouter un groupe d’Application à natifAdd Native Application to Application Group
Ajouter l’application serveur en tant que clientAdd server application as client AdfsServerApplication ajouterAdd-AdfsServerApplication Ajouter un groupe d’Application à l’Application serveurAdd Server Application to Application Group
Ajouter des API Web / ressourceAdd Web API / resource AdfsWebApiApplication ajouterAdd-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, comme 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 sont requises pour le scénario.The scenario descriptions below specify exactly which scopes are required for which scenario.

Étant donné que les services AD FS utilise un modèle d’autorisation d’administrateur, les utilisateurs ne sont pas invités à consentement lorsque 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 vigueur 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 de rendre l’utilisation des trois types de jeton:These scenarios make use of three token types:

  • id_token: jeton JWT A 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 public de l’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: jeton JWT A utilisé Oauth et OpenID connectent scénarios et destinés à être consommées 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 public de ce jeton doit correspondre à l’identificateur de la ressource ou d’une 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 collecte des informations d’identification 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.

API Web native clientNative client to Web API

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

  • L’application cliente natif utilise ADAL pour envoyer d’autorisation et jeton des demandes à AD FS, une demande d’informations d’identification de l’utilisateur en fonction des besoins, puis envoie le jeton obtenu en tant qu’un 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 provient 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 de protocole

  1. L’application native client 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 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:
GET https://fs.contoso.com/adfs/oauth2/authorize?GET https://fs.contoso.com/adfs/oauth2/authorize?

ParamètreParameter ValeurValue
response_typeresponse_type «code»"code"
ressourceresource ID RP (identificateur) de l’API Web dans le groupe d’applicationsRP ID (Identifier) of Web API in application group
identifiant_clientclient_id Id de l’application native dans le groupe d’applications de clientclient Id of the native application in the application group
redirect_uriredirect_uri Redirection des URI d’application native dans le groupe d’applicationsRedirect URI of native application in application group

Réponse à la demande d’autorisation:Authorization request response:
Si l’utilisateur n’a pas été signé avant, l’utilisateur est invité à fournir d’informations d’identification.If the user has not signed in before, the user is prompted for credentials.
AD FS répond en renvoyant un code d’autorisation en tant que le paramètre «code» dans le composant de requête de la redirect_uri.AD FS responds by returning an authorization code as the "code" parameter in the query component of the redirect_uri. Par exemple: HTTP/1.1 302 trouvé 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 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 ValeurValue
grant_typegrant_type «authorization_code»"authorization_code"
codecode code d’autorisation à partir de 1authorization code from 1
ressourceresource ID RP (identificateur) de l’API Web dans le groupe d’applicationsRP ID (Identifier) of Web API in application group
identifiant_clientclient_id Id de l’application native dans le groupe d’applications de clientclient Id of the native application in the application group
redirect_uriredirect_uri Redirection des URI d’application native dans le groupe d’applicationsRedirect URI of native application in application group

Réponse à la demande de jeton:Token request response:
AD FS répond avec un 200 HTTP avec l’access_token, refresh_token et 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 access_token de la réponse ci-dessus en tant que l’en-tête d’autorisation dans la demande 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 d’authentification uniqueSingle sign on behavior

Client ultérieur demande au sein de 1 heure (par défaut) l’access_token restera valide dans le cache, et une nouvelle demande ne déclenche pas tout le trafic à 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. L’access_token seront automatiquement extraites à partir du cache par ADAL.The access_token will automatically be fetched from the cache by ADAL.

Une fois le jeton d’accès expire, ADAL automatiquement envoie une demande de basé sur JETON actualisation pour le point de terminaison jeton AD FS (en ignorant automatiquement la demande d’autorisation).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).
Actualiser la demande de jeton:Refresh token request:
POST https://fs.contoso.com/adfs/oauth2/tokenPOST https://fs.contoso.com/adfs/oauth2/token

ParamètreParameter ValeurValue
grant_typegrant_type «refresh_token»"refresh_token"
ressourceresource ID RP (identificateur) de l’API Web dans le groupe d’applicationsRP ID (Identifier) of Web API in application group
identifiant_clientclient_id Id de l’application native dans le groupe d’applications de clientclient 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

Actualiser la réponse à la demande de jeton:Refresh token request response:
Si le jeton d’actualisation est 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 est invité pas d’informations d’identification.The user is not prompted for credentials. Pour plus d’informations sur, voir paramètres SSO AD FS Sign paramètres uniqueFor more information on SSO settings see AD FS Single Sign On Settings

Si le jeton d’actualisation a expiré, les résultats de la demande dans un HTTP 401 avec erreur «invalid_grant» et «error_description»» MSIS9615: le jeton d’actualisation reçu dans le paramètre refresh_token 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, 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 pour 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.

Clients confidentiels OAuthOauth confidential client

Ce scénario est similaire à ce qui précède dans qu’il existe une demande d’autorisation, suivie d’un code de jeton exchange.This scenario is similar to the above in that there is an authorization request, followed by a code for token exchange. L’application web (modélisée comme une Application de serveur dans AD FS) lance la demande d’autorisation via le navigateur et d’échange le code de 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 de protocole

  1. Le lance application Web d’une autorisation demande via le navigateur qui envoie un verbe 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:
    GET https://fs.contoso.com/adfs/oauth2/authorize?GET https://fs.contoso.com/adfs/oauth2/authorize?
ParamètreParameter ValeurValue
response_typeresponse_type «code»"code"
ressourceresource ID RP (identificateur) de l’API Web dans le groupe d’applicationsRP ID (Identifier) of Web API in application group
identifiant_clientclient_id Id de client de l’application native dans le groupe d’applicationsClient Id of the native application in the application group
redirect_uriredirect_uri Redirection des URI d’application web (application serveur) dans le groupe d’applicationsRedirect URI of web app (server application) in application group

Réponse à la demande d’autorisation:Authorization request response:
Si l’utilisateur n’a pas été signé avant, l’utilisateur est invité à fournir d’informations d’identification.If the user has not signed in before, the user is prompted for credentials.
AD FS répond en renvoyant un code d’autorisation en tant que le paramètre «code» dans le composant de requête de la redirect_uri, par exemple: HTTP/1.1 302 trouvé emplacement: https://webapp.contoso.com/?code=<code>;.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=<code>;.

  1. Suite à la 302 ci-dessus, le navigateur lance un verbe HTTP GET à l’application web, par exemple: GET http://redirect_uri:80 /? code =<code>.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=<code>;.

  2. À ce stade l’application web, après avoir reçu le code, initie une demande à l’extrémité de jeton AD FS, 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 ValeurValue
grant_typegrant_type «authorization_code»"authorization_code"
codecode code d’autorisation de 2 ci-dessusauthorization code from 2 above
ressourceresource ID RP (identificateur) de l’API Web dans le groupe d’applicationsRP ID (Identifier) of Web API in application group
identifiant_clientclient_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 Redirection des URI d’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’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.Note: The client's credential does not need to be a client_secret. AD FS prend en charge la possibilité d’utiliser également les certificats ou l’authentification intégrée Windows.AD FS supports the ability to use certificates or Windows Integrated Authentication as well.

Réponse à la demande de jeton:Token request response:
AD FS répond avec un 200 HTTP avec l’access_token, refresh_token et id_token dans le corps.AD FS responds with an HTTP 200 with the access_token, refresh_token, and id_token in the body.
revendicationsclaims

  1. Le site web application puis soit consomme la partie access_token de la réponse ci-dessus (dans le cas dans lesquels l’application web lui-même héberge la ressource), ou devez envoie en tant que l’en-tête d’autorisation dans la demande 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 d’authentification uniqueSingle sign on behavior

Alors que le jeton d’accès toujours sera valide pour 1 heure (par défaut) dans le cache du client, vous pouvez penser que la deuxième demande fonctionnera comme dans le scénario client natif ci-dessus - qu’une nouvelle demande ne déclenche pas tout le trafic à AD FS comme le jeton d’accès est automatiquement extraites à partir du cache par 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 envoie d’autorisation distincte et demandes de jeton, liez le premier via l’URL distinct, comme dans notre exemple.However, it is possible that the web app can sends distinct authorization and token requests, the former via distinct URL link, as in our sample.

Dans ce cas, il est le cookie SSO 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 s’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 est invité pas d’informations d’identification.The user is not prompted for credentials.

Dans le cas contraire, si l’application web est actives suffisant de savoir que si l’utilisateur est déjà authentifié, la demande autoriser peut être ignorée et soit: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 vous n’a ne pas expiré, récupération et d’utilisation, outhe cached access token, if not expired, is retrieved and used, or
  • une demande en fonction de demande jeton peut être envoyée à l’extrémité jeton AD FS, comme décrit ci-dessousa request token based request can be sent to the AD FS token endpoint, as described below

Actualiser la demande de jeton:Refresh token request:
POST https://fs.contoso.com/adfs/oauth2/tokenPOST https://fs.contoso.com/adfs/oauth2/token

ParamètreParameter ValeurValue
grant_typegrant_type «refresh_token»"refresh_token"
ressourceresource ID RP (identificateur) de l’API Web dans le groupe d’applicationsRP ID (Identifier) of Web API in application group
identifiant_clientclient_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 les jetons é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

Actualiser la réponse à la demande de jeton:Refresh token request response:
Si le jeton d’actualisation est 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 est invité pas d’informations d’identification.The user is not prompted for credentials. Pour plus d’informations sur, voir paramètres SSO AD FS Sign paramètres uniqueFor more information on SSO settings see AD FS Single Sign On Settings

Si le jeton d’actualisation a expiré, les résultats de la demande dans un HTTP 401 avec erreur «invalid_grant» et «error_description»» MSIS9615: le jeton d’actualisation reçu dans le paramètre refresh_token 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, 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 de hybrideOpenID Connect: Hybrid flow

Ce scénario est similaire à ce qui précède dans qui il est une demande d’autorisation lancée par l’application web via la redirection du navigateur et un code de jeton Exchange à 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 id_token dans le cadre de la réponse à la demande initiale d’autorisation.The difference in this scenario is that AD FS issues an id_token as part of the initial authorization request response.

Description du flux de protocole

  1. Le lance application Web d’une autorisation demande via le navigateur qui envoie un verbe 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:
GET https://fs.contoso.com/adfs/oauth2/authorize?GET https://fs.contoso.com/adfs/oauth2/authorize?

ParamètreParameter ValeurValue
response_typeresponse_type «code + id_token»"code+id_token"
response_moderesponse_mode «form_post»"form_post"
ressourceresource ID RP (identificateur) de l’API Web dans le groupe d’applicationsRP ID (Identifier) of Web API in application group
identifiant_clientclient_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 Redirection des URI d’application web (application serveur) dans le groupe d’applicationsRedirect URI of web app (server application) in the application group

Réponse à la demande d’autorisation:Authorization request response:
Si l’utilisateur n’a pas été signé avant, l’utilisateur est invité à fournir d’informations d’identification.If the user has not signed in before, the user is prompted for credentials.
AD FS répond avec un 200 HTTP 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 JWT contenant des revendications décrivant l’authentification utilisateurid_token: a JWT token containing claims describing the user authentication
  • Le formulaire publie automatiquement à la redirect_uri de l’application web, envoyer le code et l’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, après avoir reçu le code, initie une demande à l’extrémité de jeton AD FS, 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 ValeurValue
grant_typegrant_type «authorization_code»"authorization_code"
codecode code d’autorisation à partir du hautauthorization code from above
ressourceresource ID RP (identificateur) de l’API Web dans le groupe d’applicationsRP ID (Identifier) of Web API in application group
identifiant_clientclient_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 Redirection des URI d’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 à la demande de jeton:Token request response:
AD FS répond avec un 200 HTTP avec l’access_token, refresh_token et 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 site web application puis soit consomme la partie access_token de la réponse ci-dessus (dans le cas dans lesquels l’application web lui-même héberge la ressource), ou devez envoie en tant que l’en-tête d’autorisation dans la demande 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 d’authentification uniqueSingle Sign on behavior

L’authentification unique sur le comportement est identique à celle du flux de clients confidentiels Oauth 2.0 ci-dessus.The single sign on behavior is the same as for the Oauth 2.0 confidential client flow above.

De la part 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 obtenir un nouveau jeton d’accès pour une autre API Web, laquelle l’application web sera ensuite accéder en tant 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 de protocole

Les étapes 1 et 2 fonctionnent comme les é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 nécessité de clé est que le paramètre identifiant_client, l’ID de client de l’application Web 2, doit correspondre à l’ID de Web API RP A. En d’autres termes, le public le jeton d’accès en cours d’échange pour le nouveau jeton doit correspondre à l’ID de client de l’entité demandant 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.

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