Delen via


Eenmalige afmelding voor OpenID Connect met AD FS

Overzicht

Op basis van de eerste Oauth-ondersteuning in AD FS in Windows Server 2012 R2 heeft AD FS 2016 de ondersteuning voor OpenId Connect-aanmelding geïntroduceerd. Met KB4038801ondersteunt AD FS 2016 nu eenmalige afmelding voor OpenId Connect-scenario's. Dit artikel bevat een overzicht van het eenmalige afmeldingsscenario voor OpenId Connect en biedt richtlijnen voor het gebruik ervan voor uw OpenId Connect-toepassingen in AD FS.

Ontdekkingsdocument

OpenID Connect maakt gebruik van een JSON-document met de naam Detectiedocument om details over de configuratie op te geven. Dit omvat URI's van de verificatie, token, gebruikersinfo en openbare eindpunten. Hier volgt een voorbeeld van het detectie-document.

{
"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
}

De volgende aanvullende waarden zijn beschikbaar in het detectie-document om ondersteuning voor Front Channel-afmelding aan te geven:

  • frontchannel_logout_supported: waarde zal 'true' zijn
  • frontchannel_logout_session_supported: waarde zal 'true' zijn.
  • end_session_endpoint: dit is de OAuth-afmeldings-URI die de client kan gebruiken om afmelding op de server te starten.

AD FS-serverconfiguratie

De AD FS-eigenschap EnableOAuthLogout wordt standaard ingeschakeld. Deze eigenschap vertelt de AD FS-server te bladeren naar de URL (LogoutURI) met de SID om afmelding op de client te initiëren. Als u KB4038801 niet heeft geïnstalleerd, kunt u de volgende PowerShell-opdracht gebruiken:

Set-ADFSProperties -EnableOAuthLogout $true

Notitie

EnableOAuthLogout parameter wordt gemarkeerd als verouderd na de installatie van KB4038801. EnableOAUthLogout is altijd waar en heeft geen invloed op de afmeldingsfunctionaliteit.

Notitie

frontchannel_logout wordt alleen ondersteund na de installatie van KB4038801

Clientconfiguratie

De client moet een URL implementeren waarmee de aangemelde gebruiker wordt afgemeld. De beheerder kan de LogoutUri configureren in de clientconfiguratie met behulp van de volgende PowerShell-cmdlets.

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

De LogoutUri is de URL die door AF FS wordt gebruikt om de gebruiker af te melden. Voor het implementeren van de LogoutUrimoet de client ervoor zorgen dat de verificatiestatus van de gebruiker in de toepassing wordt gewist, bijvoorbeeld het verwijderen van de verificatietokens die deze heeft. AD FS navigeert naar die URL, met de SID als queryparameter, wat de relying party/toepassing signaleert om de gebruiker af te melden.

gebruikersdiagram van AD FS afmelden

  1. OAuth-token met sessie-id: AD FS bevat sessie-id in het OAuth-token op het moment van id_token tokenuitgifte. Dit wordt later gebruikt door AD FS om de relevante SSO-cookies te identificeren die voor de gebruiker moeten worden opgeschoond.
  2. Gebruiker initieert afmelding op App1: De gebruiker kan een afmelding starten vanuit een van de aangemelde toepassingen. In dit voorbeeldscenario initieert een gebruiker een afmelding vanuit App1.
  3. Toepassing verzendt afmeldingsaanvraag naar AD FS: nadat de gebruiker afmelding heeft gestart, verzendt de toepassing een GET-aanvraag naar end_session_endpoint van AD FS. De toepassing kan eventueel id_token_hint opnemen als parameter voor deze aanvraag. Als id_token_hint aanwezig is, gebruikt AD FS deze in combinatie met sessie-id om te bepalen naar welke URI de client moet worden omgeleid na afmelden (post_logout_redirect_uri). De post_logout_redirect_uri moet een geldige URI zijn die is geregistreerd bij AD FS met behulp van de parameter RedirectUris.
  4. AD FS verzendt afmelden naar aangemelde clients: AD FS gebruikt de waarde van de sessie-id om de relevante clients te vinden waar de gebruiker is aangemeld. De geïdentificeerde clients ontvangen een verzoek op de LogoutUri geregistreerd bij AD FS om een afmelding aan de kant van de client te starten.

Veelgestelde vragen

V: Ik zie de parameters frontchannel_logout_supported en frontchannel_logout_session_supported niet in het ontdekkingsdocument.
A: Controleer of u KB4038801 hebt geïnstalleerd op alle AD FS-servers. Raadpleeg Single sign-out in Server 2016 met KB4038801.

Q: Ik heb eenmalige afmelding geconfigureerd zoals aangegeven, maar de gebruiker blijft aangemeld bij andere clients.
A: Zorg ervoor dat LogoutUri is ingesteld voor alle clients waar de gebruiker is ingelogd. AD FS probeert ook op de best mogelijke manier de afmeldingsaanvraag te verzenden via de geregistreerde LogoutUri. Client moet logica implementeren om de aanvraag af te handelen en actie te ondernemen om de gebruiker af te melden bij de toepassing.

Q: Als een van de clients na afmelding teruggaat naar AD FS met een geldig vernieuwingstoken, geeft AD FS een toegangstoken?
A: Ja. Het is de verantwoordelijkheid van de clienttoepassing om alle geverifieerde artefacten te verwijderen nadat een afmeldingsaanvraag is ontvangen bij de geregistreerde LogoutUri.

Volgende stappen

AD FS-ontwikkeling