Share via


Einmaliges Abmelden für OpenID Connect mit AD FS

Übersicht

Aufbauend auf der anfänglichen Oauth-Unterstützung in AD FS unter Windows Server 2012 R2 wurde mit AD FS 2016 die Unterstützung für die OpenId Connect-Anmeldung eingeführt. Mit KB4038801 unterstützt AD FS 2016 jetzt einmaliges Abmelden für OpenId Connect-Szenarien. Dieser Artikel bietet eine Übersicht über das Szenario für einmaliges Abmelden für OpenId Connect und enthält Anleitungen zur Verwendung für Ihre OpenId Connect-Anwendungen in AD FS.

Ermittlungsdokument

OpenID Connect verwendet ein JSON-Dokument, das als „Ermittlungsdokument“ bezeichnet wird und Details zur Konfiguration bereitstellt. Dieses enthält URIs der Endpunkte für Authentifizierung, Token und Benutzerinformationen sowie der öffentlichen Endpunkte. Hier sehen Sie ein Beispiel für ein Ermittlungsdokument.

{
"issuer":"https://fs.fabidentity.com/adfs",
"authorization_endpoint":"https://fs.fabidentity.com/adfs/oauth2/authorize/",
"token_endpoint":"https://fs.fabidentity.com/adfs/oauth2/token/",
"jwks_uri":"https://fs.fabidentity.com/adfs/discovery/keys",
"token_endpoint_auth_methods_supported":["client_secret_post","client_secret_basic","private_key_jwt","windows_client_authentication"],
"response_types_supported":["code","id_token","code id_token","id_token token","code token","code id_token token"],
"response_modes_supported":["query","fragment","form_post"],
"grant_types_supported":["authorization_code","refresh_token","client_credentials","urn:ietf:params:oauth:grant-type:jwt-bearer","implicit","password","srv_challenge"],
"subject_types_supported":["pairwise"],
"scopes_supported":["allatclaims","email","user_impersonation","logon_cert","aza","profile","vpn_cert","winhello_cert","openid"],
"id_token_signing_alg_values_supported":["RS256"],
"token_endpoint_auth_signing_alg_values_supported":["RS256"],
"access_token_issuer":"http://fs.fabidentity.com/adfs/services/trust",
"claims_supported":["aud","iss","iat","exp","auth_time","nonce","at_hash","c_hash","sub","upn","unique_name","pwd_url","pwd_exp","sid"],
"microsoft_multi_refresh_token":true,
"userinfo_endpoint":"https://fs.fabidentity.com/adfs/userinfo",
"capabilities":[],
"end_session_endpoint":"https://fs.fabidentity.com/adfs/oauth2/logout",
"as_access_token_token_binding_supported":true,
"as_refresh_token_token_binding_supported":true,
"resource_access_token_token_binding_supported":true,
"op_id_token_token_binding_supported":true,
"rp_id_token_token_binding_supported":true,
"frontchannel_logout_supported":true,
"frontchannel_logout_session_supported":true
}

Die folgenden zusätzlichen Werte sind im Ermittlungsdokument verfügbar, um die Unterstützung für die Front-Channel-Abmeldung anzugeben:

  • frontchannel_logout_supported: Der Wert lautet TRUE.
  • frontchannel_logout_session_supported: Der Wert lautet TRUE.
  • end_session_endpoint: Dies ist der OAuth-Abmelde-URI, den der Client verwenden kann, um die Abmeldung auf dem Server zu initiieren.

AD FS-Serverkonfiguration

Die AD FS-Eigenschaft „EnableOAuthLogout“ ist standardmäßig aktiviert. Diese Eigenschaft weist den AD FS-Server an, nach der URL (LogoutURI) mit der SID zu suchen, um die Abmeldung auf dem Client zu initiieren. Wenn KB4038801 nicht installiert ist, können Sie den folgenden PowerShell-Befehl verwenden:

Set-ADFSProperties -EnableOAuthLogout $true

Hinweis

Der Parameter EnableOAuthLogout wird nach der Installation von KB4038801 als veraltet markiert. EnableOAUthLogout lautet immer TRUE und hat keine Auswirkungen auf die Abmeldefunktion.

Hinweis

frontchannel_logout wird erst nach der Installation von KB4038801 unterstützt.

Clientkonfiguration

Der Client muss eine URL implementieren, die den angemeldeten Benutzer abmeldet. Der Administrator kann den LogoutUri in der Clientkonfiguration mithilfe der folgenden PowerShell-Cmdlets konfigurieren.

  • (Add | Set)-AdfsNativeApplication
  • (Add | Set)-AdfsServerApplication
  • (Add | Set)-AdfsClient
Set-AdfsClient -LogoutUri <url>

LogoutUri ist die URL, die von AD-Verbunddiensten (AD FS) zum Abmelden des Benutzers verwendet wird. Für die Implementierung des LogoutUri muss der Client sicherstellen, dass er den Authentifizierungsstatus des Benutzers in der Anwendung löscht, z. B. durch Löschen der zugehörigen Authentifizierungstoken. Die AD FS-Instanz wechselt zu dieser URL. Hierbei dient die SID als Abfrageparameter, der die vertrauende Seite bzw. die Anwendung anweist, den Benutzer abzumelden.

AD FS log off user diagram

  1. OAuth-Token mit Sitzungs-ID: AD FS schließt die Sitzungs-ID im OAuth-Token zum Zeitpunkt der Ausstellung des Tokens „id_token“ ein. Dies wird später von AD FS verwendet, um die relevanten SSO-Cookies zu identifizieren, die für den Benutzer bereinigt werden sollen.
  2. Benutzer initiiert die Abmeldung in App1: Der Benutzer kann eine Abmeldung von einer der angemeldeten Anwendungen initiieren. In diesem Beispielszenario initiiert ein Benutzer eine Abmeldung von App1.
  3. Anwendung sendet Abmeldeanforderung an AD FS: Nachdem der Benutzer die Abmeldung initiiert hat, sendet die Anwendung eine GET-Anforderung an „end_session_endpoint“ von AD FS. Die Anwendung kann optional „id_token_hint“ als Parameter für diese Anforderung einschließen. Wenn „id_token_hint“ vorhanden ist, verwendet die AD FS-Instanz diesen Parameter in Verbindung mit der Sitzungs-ID, um herauszufinden, an welchen URI der Client nach dem Abmelden umgeleitet werden soll (post_logout_redirect_uri). Der post_logout_redirect_uri muss ein gültiger URI sein, der mit dem Parameter „RedirectUris“ bei AD FS registriert ist.
  4. AD FS-Instanz sendet die Abmeldung an angemeldete Clients: Die AD FS-Instanz verwendet den Sitzungsbezeichnerwert, um die relevanten Clients zu finden, bei denen der Benutzer angemeldet ist. Die identifizierten Clients erhalten eine Anforderung für den bei AD FS registrierten LogoutUri, um eine Abmeldung auf Clientseite zu initiieren.

Häufig gestellte Fragen

F: Die Parameter „frontchannel_logout_supported“ und „frontchannel_logout_session_supported“ werden im Ermittlungsdokument nicht angezeigt.
A: Stellen Sie sicher, dass KB4038801 auf allen AD FS-Servern installiert ist. Weitere Informationen finden Sie unter „Einmaliges Abmelden unter Server 2016“ in KB4038801.

F: Ich habe einmaliges Abmelden wie angegeben konfiguriert, aber der Benutzer bleibt bei anderen Clients angemeldet.
A: Stellen Sie sicher, dass der LogoutUri für alle Clients festgelegt ist, bei denen der Benutzer angemeldet ist. Außerdem führt die AD FS-Instanz einen Best-Case-Versuch zum Senden der Abmeldeanforderung für den registrierten LogoutUri durch. Der Client muss Logik implementieren, um die Anforderung zu verarbeiten, und Maßnahmen ergreifen, um den Benutzer von der Anwendung abzumelden.

F: Wenn einer der Clients nach der Abmeldung mit einem gültigen Aktualisierungstoken zu AD FS zurückkehrt, wird dann von AD FS ein Zugriffstoken ausgestellt?
A: Ja. Es liegt in der Zuständigkeit der Clientanwendung, alle authentifizierten Artefakte zu löschen, nachdem eine Abmeldeanforderung am registrierten LogoutUri empfangen wurde.

Nächste Schritte

AD FS-Entwicklung