Freigeben über


Einmaliges Abmelden für OpenID Connect mit AD FS

Overview

Basierend auf der anfänglichen Oauth-Unterstützung in AD FS in Windows Server 2012 R2 hat 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 enthält eine Übersicht über das Einmalige Abmelden für das OpenId Connect-Szenario und enthält Anleitungen zur Verwendung für Ihre OpenId Connect-Anwendungen in AD FS.

Ermittlungsdokument

OpenID Connect verwendet ein JSON-Dokument namens "Discovery-Dokument", um Details zur Konfiguration bereitzustellen. Dazu gehören URIs der Authentifizierung, des Tokens, der Benutzerinfo und der öffentlichen Endpunkte. Im Folgenden sehen Sie ein Beispiel für das Discovery-Dokument.

{
"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 werden im Discovery-Dokument verfügbar sein, um die Unterstützung für den Front Channel Logout 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 zum Initiieren der Abmeldung auf dem Server verwenden kann.

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 Sie KB4038801 nicht installiert haben, können Sie den folgenden PowerShell-Befehl verwenden:

Set-ADFSProperties -EnableOAuthLogout $true

Note

EnableOAuthLogout der Parameter wird nach der Installation von KB4038801 als veraltet markiert. EnableOAUthLogout ist immer wahr und hat keine Auswirkungen auf die Abmeldefunktionalität.

Note

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>

Dies LogoutUri ist die URL, die von AF FS verwendet wird, um den Benutzer abzumelden. Für die Implementierung von LogoutUri muss der Client sicherstellen, dass er den Authentifizierungsstatus des Benutzers in der Anwendung löscht, beispielsweise indem er die Auth-Token entfernt, die er besitzt. AD FS navigiert zu dieser URL und verwendet die SID als Abfrageparameter, um der vertrauenden Partei/Anwendung zu signalisieren, den Benutzer abzumelden.

Diagramm für das Abmelden von AD FS-Benutzern

  1. OAuth-Token mit Sitzungs-ID: AD FS enthält die Sitzungs-ID im OAuth-Token zum Zeitpunkt der id_token Tokenausstellung. Dies wird später von AD FS verwendet, um die relevanten SSO-Cookies zu identifizieren, die für den Benutzer bereinigt werden sollen.
  2. Der 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 AD FS sie in Verbindung mit der Sitzungs-ID, um herauszufinden, an welchen URI der Client nach der Abmeldung umgeleitet werden soll (post_logout_redirect_uri). Die post_logout_redirect_uri sollte ein gültiger URI sein, der mit AD FS mithilfe des RedirectUris-Parameters registriert ist.
  4. AD FS sendet die Abmeldung an angemeldete Clients: AD FS verwendet den Sitzungsbezeichnerwert, um die relevanten Clients zu finden, bei der der Benutzer angemeldet ist. Die identifizierten Clients erhalten eine Anfrage, die an die bei AD FS registrierte LogoutUri gesendet wird, um eine Abmeldung auf der Clientseite zu initiieren.

FAQs

F: Die parameter frontchannel_logout_supported und frontchannel_logout_session_supported werden im Discovery-Dokument nicht angezeigt.
Ein: Stellen Sie sicher, dass sie auf allen AD FS-Servern KB4038801 installiert haben. Informationen zum einmaligen Abmelden in Server 2016 mit KB4038801.

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

F: Wenn nach der Abmeldung einer der Clients mit einem gültigen Aktualisierungstoken zu AD FS zurückkehrt, gibt AD FS ein Zugriffstoken aus?
Ein: Ja. Es liegt in der Zuständigkeit der Clientanwendung, alle authentifizierten Artefakte zu löschen, nachdem eine Abmeldeanforderung am registrierten Abmelde-URI (LogoutUri) empfangen wurde.

Nächste Schritte

AD FS-Entwicklung