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

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 direkt in AD FS 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 die WS-Verbund, WS-Trust, und die SAML-Protokolle und Profile, 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 die Anleitung für Entwickler für diesen Protokollen interessiert sind, finden Sie unter diesem Artikel.If you are interested in developer guidance for these protocols, see the article here. In diesem Artikel liegt der Schwerpunkt auf und aus dem neueren Protokoll Support profitieren.This article will focus on how to use and benefit from the newer protocol support.

Warum moderner AuthentifizierungWhy Modern Authentication

Während Sie mit AD FS für die Anmeldung unter mit dem WS-Verbund-fortsetzen zu können, haben WS-Trust und SAML-Protokolle, wie Sie vor, mit der neueren Protokolle, Bereich erhalten Sie die folgenden Vorteile: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 zu aktivieren, für die: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 gehostet werdenapplications inside the corporate network or hosted in the cloud
    • Verwenden Sie den gleichen Satz von Bibliotheken, die Sie bereits, zum Authentifizieren von Benutzern für Azure AD verwenden könnenUse the same set of libraries you can already use to authenticate users against Azure AD
  • FlexibilitätFlexibility
    • Aktivieren Sie neben der Autorisierung für Standardbenutzer z. B. komplexere Szenarien:In addition to standard user authorization, enable more complex scenarios such as:
      • ?? 3 Abschnitten anmelden Flows, die in denen sich ein Benutzer autorisiert, eine Webanwendung oder Dienst, den Zugriff auf Ressourcen, die mit einer 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-Flows, die in denen ein Mid-Tier-Dienst ein Back-End-API zugreiftServer-to-server flows in which a mid-tier service accesses a back end API
      • ?? JavaScript-basierte Single-Page-Anwendungen (SPA)JavaScript based single-page applications (SPA)
  • Branchenweite UnterstützungIndustry support
    • OAuth 2.0 und OpenID Connect profitieren große Auslastung in der Branche, sodass Kenntnisse dieser Muster Sie die Authentifizierung und Autorisierung außerhalb einer Active Directory-Umgebung auch aktivieren könnenOAuth 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

So funktioniert es: Die GrundlagenHow it works: The Basics

Sie können die moderne Authentifizierung von AD FS für Ihre Anwendung mit den gleichen Satz von Tools und Bibliotheken, die Sie bereits, zum Authentifizieren von Benutzern für Azure AD verwenden können hinzufügen.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, es ist AD FS und nicht in Azure AD, die als die Identitätsanbieter und die Autorisierung fungiert 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 bereitstellen und Abrufen von Token, entweder direkt oder über einen 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 grundlegende Szenario besteht aus einer Benutzer- oder "Resource Owner", die Interaktion mit einem Browser auf eine Webanwendung zuzugreifen: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 Webanwendung wird einen "Client" aufgerufen werden, da er die Anforderung an den autorisierungsserver (AD FS) für ein Zugriffstoken für die 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 als eine Web-API an einer beliebigen Stelle auf das Netzwerk oder das Internet zugänglich sein.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 "Besitzer der Ressource" Act autorisiert die Client-Web-app, um das Zugriffstoken zu erhalten, durch die Bereitstellung von Anmeldeinformationen für den autorisierungsserver.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 sind AD FS verwenden den gleichen Satz von Tools und Bibliotheken, die Sie verwenden, wenn es sich bei Azure AD des Identitätsanbieters erfolgt 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-Authentifizierungsbibliothek (ADAL):-Clientbibliotheken erleichtern, die Sammeln von Benutzeranmeldeinformationen, erstellen und token-Anforderungen senden und Abrufen von den sich ergebenden Token.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 für .NET)-Middleware: Obwohl OWIN basierten communityprojekt ist, hat Microsoft einen Satz von Bibliotheken der Seite, die erstellt 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 Rollen der diese Komponenten sind im folgenden Diagramm dargestellt:The roles of these components are shown in the diagram below:

AD FS für Entwickler

Modellierung dieser Szenarien in AD FS 2016Modeling these scenarios in AD FS 2016

AnwendungsgruppenApplication Groups

Um dieser Szenarien für AD FS 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 beliebiger Anzahl und die Kombination von der Anwendung die folgenden grundlegenden Typen enthalten:An application group can contain any number and combination of the following fundamental types of application:

Anwendungsgruppe / AnwendungstypApplication Group / Application Type BeschreibungDescription Role-EigenschaftRole
Systemeigene AnwendungNative application Bezeichnet einen öffentlichen Client handelt, Dies dient eine Client-app sein, die ausgeführt wird, auf einem pc oder Gerät und mit denen der Benutzer interagiert.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 der Token vom autorisierungsserver (AD FS) für den Benutzerzugriff auf Ressourcen.Requests tokens from the authorization server (AD FS) for user access to resources. HTTP-Anforderungen auf geschützte Ressourcen, mit dem Token als HTTP-Header gesendet.Sends HTTP requests to protected resources, using the tokens as HTTP headers.
Server-AnwendungServer application Eine Webanwendung, die auf einem Server ausgeführt und ist im Allgemeinen für Benutzer über einen Browser zugegriffen werden kann.A web application that runs on a server and is generally accessible to users via a browser. Da es kann einen eigenen Client "Secret" oder Anmeldeinformationen handelt, 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 der Token vom autorisierungsserver (AD FS) für den Benutzerzugriff auf Ressourcen.Requests tokens from the authorization server (AD FS) for user access to resources. HTTP-Anforderungen auf geschützte Ressourcen, mit dem Token als HTTP-Header gesendet.Sends HTTP requests to protected resources, using the tokens as HTTP headers.
Web-APIWeb API Die End-Ressource der Benutzer greift auf.The end resource the user is accessing. Stellen Sie sich diese als neue Darstellung des "vertrauende Seiten".Think of these as the new representation of "relying parties". Nimmt Token, die von Clients abgerufenConsumes tokens obtained by clients

Unterschiede zwischen AD FS 2012 R2Differences from AD FS 2012 R2

Anwendungsgruppen kombinieren Trust- und -Autorisierung-Elemente, die AD FS 2012 R2 separat als vertrauende Seiten, Clients und Anwendungsberechtigungen verfügbar gemacht.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 verglichen, die Methoden, die mit dem entsprechenden Anwendungsvertrauensstellungsobjekte in AD FS 2012 R2 und AD FS 2016 erstellt werden: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 in Windows Server 2012 R2AD FS in Windows Server 2012 R2 In PowerShellIn PowerShell AD FS-VerwaltungAD FS Management
Native Client hinzufügenAdd native client Add-AdfsClientAdd-AdfsClient Nicht verfügbarNA
Fügen Sie Server-Anwendung als Client hinzu.Add server application as client Add-AdfsClientAdd-AdfsClient Nicht verfügbarNA
Hinzufügen von Web-APIs / RessourcenAdd Web API / resource Add-AdfsRelyingPartyTrustAdd-AdfsRelyingPartyTrust Erstellen der 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 Add-AdfsNativeClientApplicationAdd-AdfsNativeClientApplication Systemeigene Anwendung zu Anwendung-Gruppe hinzufügenAdd Native Application to Application Group
Fügen Sie Server-Anwendung als Client hinzu.Add server application as client Add-AdfsServerApplicationAdd-AdfsServerApplication Servergruppe für die Anwendung zu Anwendung hinzufügenAdd Server Application to Application Group
Hinzufügen von Web-APIs / RessourcenAdd Web API / resource Add-AdfsWebApiApplicationAdd-AdfsWebApiApplication Web-API-Anwendung zu Anwendung Gruppe hinzufügenAdd Web API Application to Application Group

Standardmäßig sind die Clients in einer Anwendungsgruppe den Zugriff auf die Ressourcen in der gleichen Gruppe zulässig.By default, the clients in an application group are allowed to access the resources in the same group. Der Administrator keine Berechtigungen für bestimmte Anwendung zu konfigurieren.The administrator does not have to configure specific application permissions. Mit Anwendungsgruppen können auch Administratoren, die Bereiche, die zulässig sind, z. B. Openid oder "user_impersonation" anzugeben.Application groups also allow administrators to specify the scopes allowed, such as openid or user_impersonation. Geben Sie die folgenden szenariobeschreibungen genau die Bereiche für welches Szenario erforderlich sind.The scenario descriptions below specify exactly which scopes are required for which scenario.

Da AD FS ein Modell der Zustimmung des Administrators verwendet werden, werden Benutzer beim Zugriff auf Ressourcen nicht zur Zustimmung aufgefordert.Because AD FS uses a model of administrator consent, users are not prompted for consent when accessing resources. Konfigurieren Sie die Anwendungsgruppe, stellt der Administrator in Kraft Zustimmung im Auftrag aller Anwendungsbenutzer bereit.By configuring the application group, the administrator in effect provides consent on behalf of all application users.

Unterstützte SzenarienSupported Scenarios

Der folgende Abschnitt beschreibt die Szenarien, die wir im Detail zu unterstützen.The following section describes the scenarios we support in more detail.

Token verwendetTokens used

Diese Szenarien ist der drei Tokentypen verwenden:These scenarios make use of three token types:

  • id_token: Ein JWT-Token verwendet, um die Identität des Benutzers darstellen.id_token: A JWT token used to represent the identity of the user. Der Anspruch "Aud" oder die Zielgruppe des ID-Tokens entspricht die Client-ID der einheitlichen Modus oder Anwendung.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, in Oauth und OpenID connect, Szenarien und von der Ressource verwendet werden soll.access_token: A JWT token used in Oauth and OpenID connect scenarios and intended to be consumed by the resource. Der Anspruch "Aud" oder die Zielgruppe des Tokens muss die ID der Ressource oder des 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, anstelle von Sammeln von Benutzeranmeldeinformationen, um einen einmaligen Erfahrung bereitzustellen.refresh_token: This token is submitted in place of collecting user credentials to provide a single sign on experience. Dieses Token wird sowohl ausgegeben und AD FS, genutzt und ist nicht von Clients oder Ressourcen gelesen werden.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 ermöglicht es, dem Benutzer von einer nativen Clientanwendung zum Aufrufen einer Web-API von AD FS 2016 geschützt werden.This scenario enables the user of a native client application to call an AD FS 2016 protected Web API.

  • Die systemeigene Clientanwendung verwendet die ADAL zum Senden von Autorisierung und Token-Anforderungen an AD FS, Aufforderung zur Eingabe von Anmeldeinformationen des Benutzers nach Bedarf, und sendet dann das resultierende Token als HTTP-Header in der 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 ist nur zu Demonstrationszwecken] Die Web-API liest die Ansprüche aus den "ClaimsPrincipal"-Objekt, das resultiert aus der das Zugriffstoken, die vom Client gesendet werden, und sendet diese 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 protokollflusses

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

Genehmigungsanfrage:Authorization request:
ERHALTEN 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) der Web-API in der AnwendungsgruppeRP ID (Identifier) of Web API in application group
client_idclient_id Client-Id der nativen Anwendung in der Anwendungsgruppeclient Id of the native application in the application group
redirect_uriredirect_uri Umleitungs-URI der nativen Anwendung in der AnwendungsgruppeRedirect URI of native application in application group

Anforderung-autorisierungsantwort:Authorization request response:
Wenn sich 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 der umleitungs-URI zurückgeben.AD FS responds by returning an authorization code as the "code" parameter in the query component of the redirect_uri. Zum Beispiel: HTTP/1.1 302 gefunden, Position: 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, zusammen mit den folgenden Parametern an die AD FS-token-Endpunkt:The native client then sends the code, along with the following parameters, to the AD FS token endpoint:

Token anfordern: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) der Web-API in der AnwendungsgruppeRP ID (Identifier) of Web API in application group
client_idclient_id Client-Id der nativen Anwendung in der Anwendungsgruppeclient Id of the native application in the application group
redirect_uriredirect_uri Umleitungs-URI der nativen Anwendung in der AnwendungsgruppeRedirect URI of native application in application group

Token-Anforderung-Antwort:Token request response:
AD FS reagiert mit HTTP 200 mit dem Zugriffstoken, Aktualisierungstoken und ID-Token im Text.AD FS responds with an HTTP 200 with the access_token, refresh_token, and id_token in the body.

  1. Klicken Sie dann die systemeigene Anwendung sendet den Access_token-Teil der obigen Antwort als dem 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.

SSO-VerhaltenSingle sign on behavior

Nachfolgende Client fordert innerhalb 1 Stunde (standardmäßig) das Zugriffstoken weiterhin gültige im Cache, und eine neue Anforderung wird kein Datenverkehr an AD FS 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. Das Zugriffstoken wird automatisch aus dem Cache von ADAL abgerufen werden.The access_token will automatically be fetched from the cache by ADAL.

Nachdem das Zugriffstoken abgelaufen ist, sendet ADAL automatisch eine Refresh-token-Basis-Anforderung an die AD FS-token-Endpunkt (überspringen die autorisierungsanforderung automatisch).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 die Anforderung eines Zugriffstokens: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) der Web-API in der AnwendungsgruppeRP ID (Identifier) of Web API in application group
client_idclient_id Client-Id der nativen Anwendung in der Anwendungsgruppeclient Id of the native application in the application group
refresh_tokenrefresh_token Das Aktualisierungstoken, das von AD FS als Reaktion auf die anfängliche tokenanforderung ausgestelltenthe refresh token issued by AD FS in response to the initial token request

Aktualisieren Sie die token Anforderungsantwort:Refresh token request response:
Wenn das Aktualisierungstoken, das innerhalb von < SSO_period > ist, führt die Anforderung eines neuen Zugriffstokens.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 Single Sign On SettingsFor more information on SSO settings see AD FS Single Sign On Settings

Wenn das Aktualisierungstoken abgelaufen ist, führt die Anforderung ein HTTP 401 mit Fehler "Invalid_grant" und ""error_description "" "MSIS9615: Das Aktualisierungstoken, das im Aktualisierungstoken Parameter empfangen 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 sendet ADAL automatisch eine neue autorisierungsanforderung an, die genau wie #1 oben aussieht.In this case, ADAL automatically submits a new authorization request that looks just like #1 above.

Webbrowser zu WebanwendungWeb Browser to Web App

In diesem Szenario muss ein Benutzer mit einem Browser den Zugriff auf Ressourcen, die von einer Webanwendung gehostet wird.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.

Vertraulicher OAuth-clientOauth confidential client

Dieses Szenario ist ähnlich wie das oben, dass eine autorisierungsanforderung, gefolgt von einem Code für den tokenaustausch vorhanden ist.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 Serveranwendung 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 protokollflusses

  1. Die Web-App initiiert eine autorisierungsanforderung, über den Browser, der eine HTTP GET-Anforderung für den AD FS sendet authorize-EndpunktThe Web App initiates an authorization request via the browser, which sends an HTTP GET to the AD FS authorize endpoint
    Autorisierungsanforderung:Authorization request:
    ERHALTEN 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) der Web-API in der AnwendungsgruppeRP ID (Identifier) of Web API in application group
client_idclient_id Client-Id der nativen Anwendung in der AnwendungsgruppeClient Id of the native application in the application group
redirect_uriredirect_uri Umleitungs-URI der Web-app (Server-Anwendung) in der AnwendungsgruppeRedirect URI of web app (server application) in application group

Anforderung-autorisierungsantwort:Authorization request response:
Wenn sich 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 Parameter "Code" in der Abfragekomponente von der umleitungs-URI zurückgibt: HTTP/1.1 302 gefunden, Position: 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. Aufgrund der oben genannten 302 initiiert der Browser HTTP GET für die Web-app, z. B.: ERSTE 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. An diesem Punkt initiiert die Web-app erhalten haben den Code, eine Anforderung an den AD FS-token-Endpunkt, senden die folgendenAt this point the web app, having received the code, initiates a request to the AD FS token endpoint, sending the following
    Token anfordern: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 aus 2 obenauthorization code from 2 above
Ressourceresource RP-ID (ID) der Web-API in der AnwendungsgruppeRP ID (Identifier) of Web API in application group
client_idclient_id Client-Id der Web-app (Server-Anwendung) in der AnwendungsgruppeClient Id of the web app (server application) in the application group
redirect_uriredirect_uri Umleitungs-URI der Web-app (Server-Anwendung) in der AnwendungsgruppeRedirect URI of web app (server application) in application group
client_secretclient_secret Geheime Schlüssel der Web-app (Server-Anwendung) in der Anwendungsgruppe.Secret of the web app (server application) in the application group. Hinweis: Anmeldeinformationen für den Client muss nicht "client_secret" werden. AD FS unterstützt die Möglichkeit, Zertifikate oder die integrierte Windows-Authentifizierung verwenden.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.

Token-Anforderung-Antwort:Token request response:
AD FS reagiert mit HTTP 200 mit dem Zugriffstoken, Aktualisierungstoken und ID-Token im Text.AD FS responds with an HTTP 200 with the access_token, refresh_token, and id_token in the body.
Ansprücheclaims
4. Die Web-Anwendung, und klicken Sie dann entweder nutzt den Access_token-Teil der obigen Antwort (in dem Fall, in dem die Web-app selbst die Ressource hostet) oder auf andere sendet sie als den Authorization-Header in der HTTP-Anforderung an, 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.

SSO-VerhaltenSingle sign on behavior

Während das Zugriffstoken weiterhin gültig für eine Stunde (standardmäßig) in den Cache des Clients befinden, Sie denken möglicherweise, dass die zweite Anforderung funktioniert wie im obigen - native Clientszenario, dass eine neue Anforderung Datenverkehr an AD FS nicht ausgelöst wird, wie das Zugriffstoken automatisch abgerufen Sie aus dem Cache werden, von 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. Allerdings ist es möglich, dass die Web-app unterschiedliche Autorisierungs- und tokenanforderungen; der erste Wert über unterschiedliche URL-Link, wie in unserem Beispiel senden kann.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.

In diesem Fall ist es das AD FS-Browser-SSO-Cookie, das AD FS, um einen neuen Autorisierungscode ausgeben, 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 für AD FS, um den neuen Autorisierungscode gegen ein neues Zugriffstoken auszutauschen.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 intelligente ausreichend zu wissen, wenn der Benutzer bereits authentifiziert ist, der autorisierungsanforderung ü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:

  • des zwischengespeicherten Zugriffstokens, wenn nicht abgelaufen ist, abgerufen und verwendet wird, oderthe cached access token, if not expired, is retrieved and used, or
  • eine Anforderung basierend-tokenanforderung kann an den 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 die Anforderung eines Zugriffstokens: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) der Web-API in der AnwendungsgruppeRP ID (Identifier) of Web API in application group
client_idclient_id Client-Id der 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 als Reaktion auf die anfängliche tokenanforderung ausgestellten 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 token Anforderungsantwort:Refresh token request response:
Wenn das Aktualisierungstoken, das innerhalb von < SSO_period > ist, führt die Anforderung eines neuen Zugriffstokens.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 Single Sign On SettingsFor more information on SSO settings see AD FS Single Sign On Settings

Wenn das Aktualisierungstoken abgelaufen ist, führt die Anforderung ein HTTP 401 mit Fehler "Invalid_grant" und ""error_description "" "MSIS9615: Das Aktualisierungstoken, das im Aktualisierungstoken Parameter empfangen 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 sendet ADAL automatisch eine neue autorisierungsanforderung an, die genau wie #1 oben aussieht.In this case, ADAL automatically submits a new authorization request that looks just like #1 above.

OpenID Connect: HybridflowOpenID Connect: Hybrid flow

Dieses Szenario ist ähnlich wie oben, gibt es eine autorisierungsanforderung durch die Web-app über den Browser umleiten und einen Code für den Austausch von der Web-app mit AD FS token 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 ersten Autorisierung Anforderung-Antwort gibt.The difference in this scenario is that AD FS issues an id_token as part of the initial authorization request response.

Beschreibung des protokollflusses

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

Genehmigungsanfrage:Authorization request:
ERHALTEN 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) der Web-API in der AnwendungsgruppeRP ID (Identifier) of Web API in application group
client_idclient_id Client-Id der Web-app (Server-Anwendung) in der AnwendungsgruppeClient Id of the web app (server application) in the application group
redirect_uriredirect_uri Umleitungs-URI der Web-app (Server-Anwendung) in der AnwendungsgruppeRedirect URI of web app (server application) in the application group

Anforderung-autorisierungsantwort:Authorization request response:
Wenn sich 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 einer HTTP 200 und das Formular mit den unten als ausgeblendete Elemente:AD FS responds with an HTTP 200 and form containing the below as hidden elements:

  • Code: des Autorisierungscodescode: the authorization code
  • "id_token": ein JWT-Token mit Ansprüchen, beschreibt die Benutzerauthentifizierungid_token: a JWT token containing claims describing the user authentication
  • Das Formular sendet automatisch auf der umleitungs-URI der Web-app, den Code und das 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 initiiert die Web-app erhalten haben den Code, eine Anforderung an den AD FS-token-Endpunkt, senden die folgendenAt this point the web app, having received the code, initiates a request to the AD FS token endpoint, sending the following

Token anfordern: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 obenauthorization code from above
Ressourceresource RP-ID (ID) der Web-API in der AnwendungsgruppeRP ID (Identifier) of Web API in application group
client_idclient_id Client-Id der Web-app (Server-Anwendung) in der AnwendungsgruppeClient Id of the web app (server application) in the application group
redirect_uriredirect_uri Umleitungs-URI der Web-app (Server-Anwendung) in der AnwendungsgruppeRedirect 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

Token-Anforderung-Antwort:Token request response:
AD FS reagiert mit HTTP 200 mit dem Zugriffstoken, Aktualisierungstoken und ID-Token im Text.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 nutzt den Access_token-Teil der obigen Antwort (in dem Fall, in dem die Web-app selbst die Ressource hostet) oder auf andere sendet sie als den Authorization-Header in der HTTP-Anforderung an, 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.

SSO-VerhaltenSingle Sign on behavior

Der SSO-Verhalten entspricht derjenigen der obige Ablauf der Oauth 2.0 vertraulicher Client.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 von einem Benutzer anfordern, und rufen Sie ein neues Zugriffstoken für eine andere Web-API, die die Web-app klicken Sie dann als Endbenutzer 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 einen Fluss "im Auftrag von" bezeichnet.This is called an "on behalf of" flow.

Beschreibung des protokollflusses

Schritt 1 und 2 funktionieren genau wie die Schritte 3 und 4 im vorherigen Datenfluss.Steps 1 and 2 work just like steps 3 and 4 in the previous flow.
In Schritt 3 ist die wichtigste Anforderung, dass der Parameter für "client_id", die Client-ID der Web-app 2, die RP-ID der Web-API a entsprechen muss Das heißt, muss die Zielgruppe des Zugriffstokens, die für das neue Token ausgetauscht werden, die Client-ID der Entität, die das 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 von Artikeln mit exemplarischen, enthalten die schrittweise Anleitungen zur Verwendung der dazugehörige Flows.See AD FS Development for the complete list of walk-through articles, which provide step-by-step instructions on using the related flows.