AD FS-Szenarien für EntwicklerAD FS Scenarios for Developers

Gilt für: Windows Server 2016Applies To: Windows Server 2016

AD FS unter Windows Server 2016 [AD FS 2016] können Sie hinzufügen Industry standard OpenID Connect und OAuth 2.0-basierte Authentifizierung und Autorisierung für Anwendungen, die Sie entwickeln und diese Anwendungen, die Benutzer direkt mit AD FS zu authentifizieren.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 unterstützt auch das WS-Federation, WS-Trust und SAML Protokolle und -Profilen, wir haben in früheren Versionen unterstützt.AD FS 2016 also supports the WS-Federation, WS-Trust, and SAML protocols and profiles we have supported in previous versions. Wenn Sie für diese Protokolle Entwicklerleitfaden interessiert sind, finden Sie im Artikel hier.If you are interested in developer guidance for these protocols, see the article here. In diesem Artikel geht verwenden, und profitieren Sie von der Unterstützung für neuere Protokolle.This article will focus on how to use and benefit from the newer protocol support.

Warum moderne AuthentifizierungWhy Modern Authentication

Können Sie zwar weiterhin mit AD FS für die Anmeldung auf WS-Federation, verfügen Sie über WS-Trust und SAML-Protokolle wie, bevor mit der neueren Protokollen Bereich Sie die folgenden Vorteile erhalten: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:

  • Einfachheit und KonsistenzSimplicity and consistency
    • Verwenden Sie den gleichen Satz von APIs und Muster, um anmelden für zu aktivieren:Use the same set of APIs and patterns to enable sign on for:
      • mehrere Typen von Anwendungen (Server, Desktop, Mobile, Browser)multiple types of applications (server, desktop, mobile, browser)
      • mehrere Plattformen (android, iOS, Windows)multiple platforms (android, iOS, Windows)
      • Anwendungen innerhalb des Unternehmensnetzwerks oder in der Cloud gehostetapplications inside the corporate network or hosted in the cloud
    • Verwenden Sie den gleichen Satz von Bibliotheken, die Sie bereits zum Authentifizieren von Benutzern bei Azure AD verwenden könnenUse the same set of libraries you can already use to authenticate users against Azure AD
  • FlexibilitätFlexibility
    • Aktivieren Sie zusätzlich zur Autorisierung Standardbenutzern z. B. komplexere Szenarien:In addition to standard user authorization, enable more complex scenarios such as:
      • ?? 3-Abschnitten anmelden Flüsse, die in denen ein Benutzer autorisiert, einer Web-Anwendung oder einem Dienst auf Ressourcen zugreifen, die mit einem anderen Web-app oder Dienst befinden.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.
      • ?? Server-zu-Server-Flüsse, die in denen Mid-Tier-Dienst ein Back-End-API-zugreiftServer-to-server flows in which a mid-tier service accesses a back end API
      • ?? JavaScript-basierte Einzelseiten-Anwendungen (SPA)JavaScript based single-page applications (SPA)
  • UnterstützungIndustry support
    • OAuth 2.0 und OpenID Connect genießen Breite Auslastung gesamten Branche zusammen, damit Kenntnisse in dieser Muster eine Authentifizierung und Autorisierung außerhalb einer Active Directory-Umgebung unterstützenOAuth 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

Funktionsweise: GrundlagenHow it works: The Basics

Sie können moderne AD FS-Authentifizierung hinzufügen, der Anwendung mit den gleichen Satz von Tools und Bibliotheken, die Sie bereits zum Authentifizieren von Benutzern bei Azure AD verwenden können.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.

In AD FS-Szenarien, ist es AD FS und kein Azure AD, der als Identitätsanbieter herzustellen und Autorisierung dient Server.In AD FS scenarios of course, it is AD FS and not Azure AD that serves as the identity provider and authorization server. Andernfalls die Konzepte sind identisch: Benutzer ihre Anmeldeinformationen eingeben und Abrufen von Token, entweder direkt oder über ein Vermittler, für den Zugriff auf Ressourcen.Otherwise the concepts are exactly the same: users provide their credentials and obtain tokens, either directly or via an intermediary, for access to resources.

Das einfachste Szenario besteht aus einem Benutzer oder "Ressourcenbesitzer", die Interaktion mit einem Browser, um eine Webanwendung zugreifen:The most basic scenario consists of a user or "resource owner", interacting with a browser to access a web application:

AD FS für Entwickler

Die Web-Anwendung wird ein "Client" aufgerufen, da es die Anforderung an die autorisierungsserver (AD FS) für ein Zugriffstoken mit der Ressource initiiert.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. Die Ressource kann von der Web-app selbst gehostet werden oder kann als Web-API-Netzwerk oder Internet zugegriffen werden.The resource may be hosted by the web app itself or may be accessible as a web API somewhere on the network or internet. Der Benutzer oder der "Besitzer der Ressource" wird die Client-Web-app das Zugriffstoken zu erhalten, durch die Bereitstellung von Anmeldeinformationen an den autorisierungsserver autorisiert.The user or "resource owner" authorizes the client web app to receive that access token by providing credentials to the authorization server.

Funktionsweise: KomponentenHow it works: components

OAuth 2.0 und OpenID Connect Szenarien in AD FS-Hersteller verwenden den gleichen Satz von Tools und Bibliotheken, die Sie verwenden, wenn es sich bei Azure AD der Identitätsanbieter ist.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. Diese Komponenten sind:These components are:

  • Active Directory-Authentifizierung Library (ADAL): Client-Bibliotheken erleichtern, die Anmeldeinformationen des Benutzers sammeln, erstellen und übermitteln token anfordert und die resultierenden Token abrufen.Active Directory Authentication Library (ADAL): client libraries that facilitate collecting user credentials, creating and submitting token requests and retrieving the resulting tokens.
  • OWIN (Open Web Interface for .NET) Middleware: während OWIN ist ein communityprojekt basierend, Microsoft hat eine Reihe von Server Seite Bibliotheken, die für den Schutz von Webanwendungen und web-APIs mit OpenID Connect und 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

Die Funktionen der folgenden Komponenten sind im folgenden Diagramm dargestellt:The roles of these components are shown in the diagram below:

AD FS für Entwickler

Erstellen von diesen Szenarien in AD FS 2016Modeling these scenarios in AD FS 2016

AnwendungsgruppenApplication Groups

Um diese Szenarien in AD FS-Richtlinie darzustellen, haben wir ein neues Konzept namens Anwendungsgruppen eingeführt.To represent these scenarios in AD FS policy, we have introduced a new concept called Application Groups. Eine Anwendungsgruppe kann eine beliebige Anzahl und Kombination der folgenden grundlegenden Typen der Anwendung enthalten:An application group can contain any number and combination of the following fundamental types of application:

Anwendungsgruppe / Anwendung gebenApplication Group / Application Type BeschreibungDescription RolleRole
Systemeigene AnwendungNative application In einigen Fällen einen öffentlichen Client aufgerufen wird, ist dies soll eine Client-app, die auf einem pc oder Gerät und mit dem der Benutzer interagiert ausgeführt wird.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. Anforderungen Token vom autorisierungsserver (AD FS) für den Benutzerzugriff auf Ressourcen.Requests tokens from the authorization server (AD FS) for user access to resources. Sendet HTTP-Anforderungen auf geschützte Ressourcen, die das Token als HTTP-Header verwenden.Sends HTTP requests to protected resources, using the tokens as HTTP headers.
Server-AnwendungServer application Eine Anwendung, die auf einem Server ausgeführt wird und in der Regel für Benutzer über einen Browser zugänglich ist.A web application that runs on a server and is generally accessible to users via a browser. Da es einen eigenen geheimen' ' oder Anmeldeinformationen verwalten kann, wird sie manchmal einen vertraulichen Client aufgerufen.Because it is capable of maintaining its own client 'secret' or credential, it is sometimes called a confidential client. Anforderungen Token vom autorisierungsserver (AD FS) für den Benutzerzugriff auf Ressourcen.Requests tokens from the authorization server (AD FS) for user access to resources. Sendet HTTP-Anforderungen auf geschützte Ressourcen, die das Token als HTTP-Header verwenden.Sends HTTP requests to protected resources, using the tokens as HTTP headers.
Web-APIWeb API Der End-Ressourcen der Benutzer greift auf.The end resource the user is accessing. Betrachten Sie diese als neue Darstellung von "vertrauende Seiten".Think of these as the new representation of "relying parties". Nimmt Token abgerufen, indem clientsConsumes tokens obtained by clients

Unterschiede von AD FS 2012 R2Differences from AD FS 2012 R2

Anwendungsgruppen kombinieren, als vertrauenswürdig einstufen und Autorisierung-Elemente, die AD FS 2012 R2 separat als vertrauende Seiten, Clients und Berechtigungen zur Verfügung gestellt.Application groups combine trust and authorization elements that AD FS 2012 R2 exposed separately, as relying parties, clients, and application permissions.

In den folgenden Tabellen werden die Methoden, mit der entsprechenden Anwendung Vertrauensstellung Objekte in AD FS 2012 R2 Vs AD FS 2016 erstellt wurden, verglichen: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 unter Windows Server 2012 R2AD FS in Windows Server 2012 R2 In PowerShellIn PowerShell AD FS-VerwaltungAD FS Management
Native Client hinzufügenAdd native client Hinzufügen AdfsClientAdd-AdfsClient NANA
Server-Anwendung als Client hinzu.Add server application as client Hinzufügen AdfsClientAdd-AdfsClient NANA
Hinzufügen von Web-API / RessourceAdd Web API / resource Hinzufügen AdfsRelyingPartyTrustAdd-AdfsRelyingPartyTrust Erstellen Sie die Vertrauensstellung der vertrauenden SeiteCreate Relying Party Trust
AD FS 2016AD FS 2016 In PowerShellIn PowerShell AD FS-VerwaltungAD FS Management
Native Client hinzufügenAdd native client Hinzufügen AdfsNativeClientApplicationAdd-AdfsNativeClientApplication Systemeigene Anwendung Gruppe hinzufügenAdd Native Application to Application Group
Server-Anwendung als Client hinzu.Add server application as client Hinzufügen AdfsServerApplicationAdd-AdfsServerApplication Anwendung Servergruppe hinzufügenAdd Server Application to Application Group
Hinzufügen von Web-API / RessourceAdd Web API / resource Hinzufügen AdfsWebApiApplicationAdd-AdfsWebApiApplication Web-API-Anwendung Gruppe hinzufügenAdd Web API Application to Application Group

Standardmäßig sind die Clients in einer Anwendungsgruppe zulässig, Zugriff auf die Ressourcen in der gleichen Gruppe.By default, the clients in an application group are allowed to access the resources in the same group. Der Administrator hat keinen bestimmten Berechtigungen zu konfigurieren.The administrator does not have to configure specific application permissions. Anwendungsgruppen ermöglichen Administratoren die Bereiche, die zulässig sind, z. B. Openid oder User_impersonation angeben.Application groups also allow administrators to specify the scopes allowed, such as openid or user_impersonation. Die folgenden szenariobeschreibungen angeben, genau welche Bereiche für die einzelnen Szenarien erforderlich sind.The scenario descriptions below specify exactly which scopes are required for which scenario.

Da AD FS ein Modell der Administrator Zustimmung verwendet werden, sind Benutzer nicht zur Bestätigung aufgefordert, den Zugriff auf Ressourcen.Because AD FS uses a model of administrator consent, users are not prompted for consent when accessing resources. Konfigurieren Sie die Anwendungsgruppe, ermöglicht es dem Systemadministrator in Kraft Zustimmung für alle Anwendungsbenutzer.By configuring the application group, the administrator in effect provides consent on behalf of all application users.

Unterstützte SzenarienSupported Scenarios

Im folgenden Abschnitt werden die Szenarien, die wir noch ausführlicher unterstützen.The following section describes the scenarios we support in more detail.

Token verwendetTokens used

Stellen Sie diese Szenarien von drei token verwenden:These scenarios make use of three token types:

  • Id_token: ein JWT-Token verwendet, um die Identität des Benutzers darzustellen.id_token: A JWT token used to represent the identity of the user. Der Anspruch 'Aud' oder Zielgruppe von der Id_token entspricht die Client-ID der Anwendung systemeigen oder Server.The 'aud' or audience claim of the id_token matches the client ID of the native or server application.
  • Access_token: ein JWT-Token verwendet Oauth und OpenID connect-Szenarien und beabsichtigen, die von der Ressource genutzt werden.access_token: A JWT token used in Oauth and OpenID connect scenarios and intended to be consumed by the resource. Der Anspruch 'Aud' oder Zielgruppe dieses Token muss den Bezeichner der Ressource oder Web-API übereinstimmen.The 'aud' or audience claim of this token must match the identifier of the resource or Web API.
  • Refresh_token: dieses Token wird übermittelt, anstatt das Sammeln von Benutzeranmeldeinformationen um ein einmaliges Anmelden Erfahrung zu bieten.refresh_token: This token is submitted in place of collecting user credentials to provide a single sign on experience. Dieses Token ist sowohl ausgestellt und von AD FS, verbraucht und kann nicht von Clients oder Ressourcen gelesen.This token is both issued and consumed by AD FS, and is not readable by clients or resources.

Native Client Web-APINative client to Web API

Dieses Szenario kann der Benutzer eine systemeigene Clientanwendung eine AD FS 2016 geschützte Web-API aufrufen.This scenario enables the user of a native client application to call an AD FS 2016 protected Web API.

  • Die systemeigene Clientanwendung verwendet ADAL Autorisierung senden und Token Anforderungen für AD FS, Aufforderung zur Eingabe von Anmeldeinformationen des Benutzers nach Bedarf, und klicken Sie dann sendet das resultierende Token als einen HTTP-Header auf die Anforderung an die Web-APIThe 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
  • [Dieser Teil dient nur zu Demonstrationszwecken] Die Web-API liest die Ansprüche aus dem ClaimsPrincipal-Objekt, das das Zugriffstoken, die vom Client gesendeten Ergebnisse und sendet sie an den Client zurück.[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.

Beschreibung des Protokolls Fluss

  1. Die systemeigene Clientanwendung initiiert den Ablauf mit einem Aufruf der ADAL-Bibliothek.The native client application initiates the flow with a call to the ADAL library. Dies führt dazu, eine browserbasierte HTTP GET, um die AD FS Endpunkt autorisieren:This triggers a browser based HTTP GET to the AD FS authorize endpoint:

Autorisierungsanforderung:Authorization request:
GET https://fs.contoso.com/adfs/oauth2/authorize?GET https://fs.contoso.com/adfs/oauth2/authorize?

ParameterParameter WertValue
response_typeresponse_type "Code""code"
Ressourceresource RP-ID (ID) des Web-API in AnwendungsgruppeRP ID (Identifier) of Web API in application group
client_idclient_id Client-Id der einheitlichen Anwendung in der Anwendungsgruppeclient Id of the native application in the application group
redirect_uriredirect_uri Umleiten von einheitlichen Anwendung in Anwendungsgruppe URIRedirect URI of native application in application group

Die Antwort auf Autorisierung:Authorization request response:
Wenn der Benutzer nicht angemeldet hat, bevor der Benutzer zur Eingabe von Anmeldeinformationen aufgefordert wird.If the user has not signed in before, the user is prompted for credentials.
AD FS reagiert, indem Sie einen Autorisierungscode als Parameter "Code" in der Abfragekomponente von den Redirect_uri zurückgeben.AD FS responds by returning an authorization code as the "code" parameter in the query component of the redirect_uri. Beispiel: HTTP/1.1 302 gefundenen Ort: Http://redirect_uri:80 /? Code =<Code>.For example: HTTP/1.1 302 Found Location: http://redirect_uri:80/?code=<code>;.

  1. Der native Client sendet dann den Code mit den folgenden Parametern, zum Endpunkt AD FS-token:The native client then sends the code, along with the following parameters, to the AD FS token endpoint:

Tokenanforderung:Token Request:
POST https://fs.contoso.com/adfs/oauth2/TokenPOST https://fs.contoso.com/adfs/oauth2/token

ParameterParameter WertValue
grant_typegrant_type "Authorization_code""authorization_code"
Codecode Autorisierungscode von 1authorization code from 1
Ressourceresource RP-ID (ID) des Web-API in AnwendungsgruppeRP ID (Identifier) of Web API in application group
client_idclient_id Client-Id der einheitlichen Anwendung in der Anwendungsgruppeclient Id of the native application in the application group
redirect_uriredirect_uri Umleiten von einheitlichen Anwendung in Anwendungsgruppe URIRedirect URI of native application in application group

Tokenanforderung Antwort:Token request response:
AD FS antwortet mit einer HTTP-200 mit Access_token, Refresh_token und Id_token im Textkörper.AD FS responds with an HTTP 200 with the access_token, refresh_token, and id_token in the body.

  1. Klicken Sie dann auf die ursprüngliche Anwendung sendet die Access_token Teil der oben genannten Antwort als Autorisierungsheader in der HTTP-Anforderung an die Web-API.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.

Das Verhalten für einmaliges AnmeldenSingle sign on behavior

Nachfolgende Clientanforderungen innerhalb von 1 Stunde (standardmäßig) die Access_token weiterhin gültig im Cache, und eine neue Anforderung, Datenverkehr zu AD FS wird nicht ausgelöst.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. Die Access_token wird von ADAL automatisch aus dem Cache abgerufen werden.The access_token will automatically be fetched from the cache by ADAL.

Nachdem das Zugriffstoken abgelaufen ist, sendet ADAL automatisch eine Aktualisierung token Basis-Anforderung an den Endpunkt der AD FS-token (die autorisierungsanforderung automatisch überspringen).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).
Aktualisieren Sie tokenanforderung:Refresh token request:
POST https://fs.contoso.com/adfs/oauth2/TokenPOST https://fs.contoso.com/adfs/oauth2/token

ParameterParameter WertValue
grant_typegrant_type "Refresh_token""refresh_token"
Ressourceresource RP-ID (ID) des Web-API in AnwendungsgruppeRP ID (Identifier) of Web API in application group
client_idclient_id Client-Id der einheitlichen Anwendung in der Anwendungsgruppeclient Id of the native application in the application group
refresh_tokenrefresh_token Das Aktualisierungstoken von AD FS in Reaktion auf die erste Anforderung token ausgestelltthe refresh token issued by AD FS in response to the initial token request

Aktualisieren Sie die Antwort auf token:Refresh token request response:
Wenn das Aktualisierungstoken innerhalb von < SSO_period > ist, führt die Anforderung ein neues Zugriffstoken.If the refresh token is within <SSO_period>, the request will result in a new access token. Der Benutzer wird nicht zur Eingabe von Anmeldeinformationen aufgefordert.The user is not prompted for credentials. Weitere Informationen zu SSO-Einstellungen finden Sie unter AD FS einzelne Zeichen auf-EinstellungenFor more information on SSO settings see AD FS Single Sign On Settings

Wenn das Aktualisierungstoken abgelaufen ist, führt die Anforderung mit Fehler "Invalid_grant" und "Error_description" HTTP 401 "MSIS9615: das Aktualisierungstoken erhalten im Refresh_token-Parameter ist abgelaufen".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". In diesem Fall fordert die ADAL automatisch neue Autorisierung, die genau wie #1 oben aussieht.In this case, ADAL automatically submits a new authorization request that looks just like #1 above.

Webbrowser, um Web-AppWeb Browser to Web App

In diesem Szenario muss ein Benutzer mit einem Browser Zugriff auf Ressourcen, die von einer Webanwendung gehostet werden.In this scenario, a user with a browser needs to access resources hosted by a web application.
Es gibt zwei Szenarien, die dies zu erreichen.There are two scenarios that accomplish this.

Vertrauliche OAuth-clientOauth confidential client

Dieses Szenario ähnelt der vorstehenden ergibt sich eine autorisierungsanforderung, gefolgt von einem Code für den tokenaustausch.This scenario is similar to the above in that there is an authorization request, followed by a code for token exchange. Die Web-app (modelliert als Server-Anwendung in AD FS) initiiert die autorisierungsanforderung über den Browser und tauscht den Code für das Token (durch die direkte Verbindung mit 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)

Beschreibung des Protokolls Fluss

  1. Die Web-App initiiert eine Genehmigung anfordern, über den Browser, sendet eine HTTP GET an der AD FS autorisieren EndpunktThe Web App initiates an authorization request via the browser, which sends an HTTP GET to the AD FS authorize endpoint
    Autorisierungsanforderung:Authorization request:
    GET https://fs.contoso.com/adfs/oauth2/authorize?GET https://fs.contoso.com/adfs/oauth2/authorize?
ParameterParameter WertValue
response_typeresponse_type "Code""code"
Ressourceresource RP-ID (ID) des Web-API in AnwendungsgruppeRP ID (Identifier) of Web API in application group
client_idclient_id Client-Id der einheitlichen Anwendung in der AnwendungsgruppeClient Id of the native application in the application group
redirect_uriredirect_uri Umleiten der URI des Web-app (Server-Anwendung) in "Anwendungsserver"Redirect URI of web app (server application) in application group

Die Antwort auf Autorisierung:Authorization request response:
Wenn der Benutzer nicht angemeldet hat, bevor der Benutzer zur Eingabe von Anmeldeinformationen aufgefordert wird.If the user has not signed in before, the user is prompted for credentials.
AD FS reagiert, indem Sie einen Autorisierungscode z. B. als "Code"-Parameter in der Abfragekomponente von den Redirect_uri zurückgeben: HTTP/1.1 302 gefundenen Ort: 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. Aufgrund der oben genannten 302 Browser initiiert eine HTTP GET an die Web-app, zum Beispiel: 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. An diesem Punkt wird eine Anforderung an den AD FS-token-Endpunkt, senden die folgenden initiiert die Web-app, die den Code erhalten habenAt this point the web app, having received the code, initiates a request to the AD FS token endpoint, sending the following
    Tokenanforderung:Token request:
    POST https://fs.contoso.com/adfs/oauth2/TokenPOST https://fs.contoso.com/adfs/oauth2/token

ParameterParameter WertValue
grant_typegrant_type "Authorization_code""authorization_code"
Codecode Autorisierungscode von 2 obenauthorization code from 2 above
Ressourceresource RP-ID (ID) des Web-API in AnwendungsgruppeRP ID (Identifier) of Web API in application group
client_idclient_id Client-Id für die Web-app (Server-Anwendung) in der AnwendungsgruppeClient Id of the web app (server application) in the application group
redirect_uriredirect_uri Umleiten der URI des Web-app (Server-Anwendung) in "Anwendungsserver"Redirect URI of web app (server application) in application group
client_secretclient_secret Die geheimen Schlüssel der Web-App (Server-Anwendung) in der Anwendungsgruppe.Secret of the web app (server application) in the application group. Hinweis: Die Client-Anmeldeinformationen muss kein Client_secret werden.Note: The client's credential does not need to be a client_secret. AD FS unterstützt die Möglichkeit, Zertifikate oder integrierte Windows-Authentifizierung verwenden.AD FS supports the ability to use certificates or Windows Integrated Authentication as well.

Tokenanforderung Antwort:Token request response:
AD FS antwortet mit einer HTTP-200 mit Access_token, Refresh_token und Id_token im Textkörper.AD FS responds with an HTTP 200 with the access_token, refresh_token, and id_token in the body.
Ansprücheclaims

  1. Die Web-Anwendung, und klicken Sie dann entweder die Access_token Teil der oben genannten Antwort (in der Fall, in dem die Web-app selbst die Ressource hostet) verwendet oder auf andere Weise sendet er als Autorisierungsheader in der HTTP-Anforderung an die Web-API.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.

Das Verhalten für einmaliges AnmeldenSingle sign on behavior

Während das Zugriffstoken noch gültig für 1 Stunde (standardmäßig) im Cache des Clients enthalten sind, denken Sie vielleicht, dass die zweite Anforderung funktioniert wie in der oben genannten - native Client-Szenario, dass eine neue Anforderung sämtlicher Datenverkehr, der AD FS nicht ausgelöst wird, wie das Zugriffstoken wird durch ADAL automatisch aus dem Cache abgerufen werden.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. Es ist jedoch möglich, dass die Web-app kann unterschiedliche Autorisierung und tokenanforderungen sendet, die erste über eindeutige URL verknüpfen, wie Sie in unserem Beispiel.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.

In diesem Fall ist es das AD FS-Browser-SSO-Cookie, das AD FS einen neuen Autorisierungscode ausgestellt werden, ohne dass der Benutzer zur Eingabe von Anmeldeinformationen ermöglicht.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. Die Web-app ruft dann zu AD FS zum Austausch von des neuen Autorisierungscodes für ein neues Zugriffstoken.The web app then calls to AD FS to exchange the new authorization code for a new access token. Der Benutzer wird nicht zur Eingabe von Anmeldeinformationen aufgefordert.The user is not prompted for credentials.

Andernfalls ist die Web-app smart genug, um zu wissen, wenn der Benutzer bereits authentifiziert ist, die zum Autorisieren Anforderung übersprungen werden kann und entweder:Otherwise, if the web app is smart enough to know if the user is already authenticated, the authorize request can be skipped and either:

  • das zwischengespeicherte Zugriffstoken, wenn nicht abgelaufen ist, abgerufen und verwendet wird, oderthe cached access token, if not expired, is retrieved and used, or
  • eine Anforderung token Basis-Anforderung kann der AD FS-token-Endpunkt, gesendet werden, wie unten beschriebena request token based request can be sent to the AD FS token endpoint, as described below

Aktualisieren Sie tokenanforderung:Refresh token request:
POST https://fs.contoso.com/adfs/oauth2/TokenPOST https://fs.contoso.com/adfs/oauth2/token

ParameterParameter WertValue
grant_typegrant_type "Refresh_token""refresh_token"
Ressourceresource RP-ID (ID) des Web-API in AnwendungsgruppeRP ID (Identifier) of Web API in application group
client_idclient_id Client-Id für die Web-app (Server-Anwendung) in der AnwendungsgruppeClient Id of the web app (server application) in the application group
refresh_tokenrefresh_token Aktualisieren von AD FS in Reaktion auf die erste token Anforderung ausgestellte tokenRefresh token issued by AD FS in response to the initial token request
client_secretclient_secret Geheimen Schlüssel der Web-App (Server-Anwendung) in der AnwendungsgruppeSecret of the web app (server application) in the application group

Aktualisieren Sie die Antwort auf token:Refresh token request response:
Wenn das Aktualisierungstoken innerhalb von < SSO_period > ist, führt die Anforderung ein neues Zugriffstoken.If the refresh token is within <SSO_period>, the request will result in a new access token. Der Benutzer wird nicht zur Eingabe von Anmeldeinformationen aufgefordert.The user is not prompted for credentials. Weitere Informationen zu SSO-Einstellungen finden Sie unter AD FS einzelne Zeichen auf-EinstellungenFor more information on SSO settings see AD FS Single Sign On Settings

Wenn das Aktualisierungstoken abgelaufen ist, führt die Anforderung mit Fehler "Invalid_grant" und "Error_description" HTTP 401 "MSIS9615: das Aktualisierungstoken erhalten im Refresh_token-Parameter ist abgelaufen".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". In diesem Fall fordert die ADAL automatisch neue Autorisierung, die genau wie #1 oben aussieht.In this case, ADAL automatically submits a new authorization request that looks just like #1 above.

OpenID Connect: Hybrid-FlussOpenID Connect: Hybrid flow

Dieses Szenario ist ähnlich wie die oben genannten, gibt es eine autorisierungsanforderung durch die Web-app über den Browser-Umleitung sowie einen Code token Exchange über die Web-app für den AD FS initiiert wird.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. Der Unterschied in diesem Szenario besteht darin, dass AD FS ein Id_token als Teil der Antwort auf die erste Anforderung ausstellt.The difference in this scenario is that AD FS issues an id_token as part of the initial authorization request response.

Beschreibung des Protokolls Fluss

  1. Die Web-App initiiert eine Genehmigung anfordern, über den Browser, sendet eine HTTP GET an der AD FS autorisieren EndpunktThe Web App initiates an authorization request via the browser, which sends an HTTP GET to the AD FS authorize endpoint

Autorisierungsanforderung:Authorization request:
GET https://fs.contoso.com/adfs/oauth2/authorize?GET https://fs.contoso.com/adfs/oauth2/authorize?

ParameterParameter WertValue
response_typeresponse_type "Code + Id_token""code+id_token"
response_moderesponse_mode "Form_post""form_post"
Ressourceresource RP-ID (ID) des Web-API in AnwendungsgruppeRP ID (Identifier) of Web API in application group
client_idclient_id Client-Id für die Web-app (Server-Anwendung) in der AnwendungsgruppeClient Id of the web app (server application) in the application group
redirect_uriredirect_uri Umleiten der URI des Web-app (Server-Anwendung) in der AnwendungsgruppeRedirect URI of web app (server application) in the application group

Die Antwort auf Autorisierung:Authorization request response:
Wenn der Benutzer nicht angemeldet hat, bevor der Benutzer zur Eingabe von Anmeldeinformationen aufgefordert wird.If the user has not signed in before, the user is prompted for credentials.
AD FS antwortet mit einem HTTP-200 und Formular mit den unten als ausgeblendete Elemente:AD FS responds with an HTTP 200 and form containing the below as hidden elements:

  • Code: den Autorisierungscodecode: the authorization code
  • Id_token: ein JWT-Token mit Ansprüchen beschreiben die Benutzerauthentifizierungid_token: a JWT token containing claims describing the user authentication
  • Das Formular wird automatisch an den Redirect_uri Web-App, die den Code und die Id_token an die Web-app senden.The form automatically posts to the redirect_uri of the web app, sending the code and the id_token to the web app.
  1. An diesem Punkt wird eine Anforderung an den AD FS-token-Endpunkt, senden die folgenden initiiert die Web-app, die den Code erhalten habenAt this point the web app, having received the code, initiates a request to the AD FS token endpoint, sending the following

Tokenanforderung:Token request:
POST https://fs.contoso.com/adfs/oauth2/TokenPOST https://fs.contoso.com/adfs/oauth2/token

ParameterParameter WertValue
grant_typegrant_type "Authorization_code""authorization_code"
Codecode Autorisierungscode von obenauthorization code from above
Ressourceresource RP-ID (ID) des Web-API in AnwendungsgruppeRP ID (Identifier) of Web API in application group
client_idclient_id Client-Id für die Web-app (Server-Anwendung) in der AnwendungsgruppeClient Id of the web app (server application) in the application group
redirect_uriredirect_uri Umleiten der URI des Web-app (Server-Anwendung) in "Anwendungsserver"Redirect URI of web app (server application) in application group
client_secretclient_secret Geheimen Schlüssel der Web-App (Server-Anwendung) in der AnwendungsgruppeSecret of the web app (server application) in the application group

Tokenanforderung Antwort:Token request response:
AD FS antwortet mit einer HTTP-200 mit Access_token, Refresh_token und Id_token im Textkörper.AD FS responds with an HTTP 200 with the access_token, refresh_token, and id_token in the body.

  1. Die Web-Anwendung, und klicken Sie dann entweder die Access_token Teil der oben genannten Antwort (in der Fall, in dem die Web-app selbst die Ressource hostet) verwendet oder auf andere Weise sendet er als Autorisierungsheader in der HTTP-Anforderung an die Web-API.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.

Das Verhalten für einmaliges AnmeldenSingle Sign on behavior

Das Verhalten für einmaliges Anmelden ist identisch mit denen für die Steuerung der Oauth 2.0-vertrauliche Client oben.The single sign on behavior is the same as for the Oauth 2.0 confidential client flow above.

Im Auftrag vonOn Behalf Of

In diesem Szenario verwendet eine Web-app das ursprüngliche Zugriffstoken eines Benutzers anfordern und erhalten einen anderen Zugriffstoken für einen anderen Web-API, die die Web-app dann als der Benutzer zugreifen.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. Dies ist ein Fluss "im Auftrag von" bezeichnet.This is called an "on behalf of" flow.

Beschreibung des Protokolls Fluss

Schritte 1 und 2 funktioniert genau wie die Schritte 3 und 4 im vorherigen Fluss.Steps 1 and 2 work just like steps 3 and 4 in the previous flow.
In Schritt 3 ist die wichtigste Anforderung, dass der Client_id-Parameter, die Client-ID der Web-App 2, die RP-ID der Web-API A. übereinstimmen müssen Anders ausgedrückt, muss die Zielgruppe des Zugriffstokens, die für das neue Token ausgetauscht werden die Client-ID der Entität, die neue Token anfordert übereinstimmen.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.

Finden Sie unter AD FS-Entwicklung für die vollständige Liste der exemplarischen Vorgehensweise Artikel, die eine schrittweise Anleitung zur Verwendung von verwandten Flüsse bereitstellen.See AD FS Development for the complete list of walk-through articles, which provide step-by-step instructions on using the related flows.