Enkel utloggning för OpenID Connect med AD FS
Överblick
Ad FS 2016, som bygger på det första Oauth-stödet i AD FS i Windows Server 2012 R2, introducerade stödet för OpenId Connect-inloggning. Med KB4038801stöder AD FS 2016 nu enkel utloggning för OpenId Connect-scenarier. Den här artikeln innehåller en översikt över scenariot med enkel utloggning för OpenId Connect och ger vägledning om hur du använder det för dina OpenId Connect-program i AD FS.
Upptäcktsdokument
OpenID Connect använder ett JSON-dokument som kallas "Identifieringsdokument" för att ge information om konfigurationen. Detta inkluderar URI:er för autentisering, token, userinfo och offentliga slutpunkter. Följande är ett exempel på ett upptäcktsdokument.
{
"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
}
Följande ytterligare värden kommer att vara tillgängliga i discoverydokumentet för att visa stöd för Front Channel Logout.
- frontchannel_logout_supported: värdet kommer att vara "sant"
- frontchannel_logout_session_supported: värdet kommer att vara "sant".
- end_session_endpoint: det här är OAuth-utloggnings-URI:n som klienten kan använda för att initiera utloggning på servern.
AD FS-serverkonfiguration
AD FS-egenskapen EnableOAuthLogout aktiveras som standard. Den här egenskapen instruerar AD FS-servern att bläddra efter URL:en (LogoutURI) med SID för att initiera utloggningen på klienten. Om du inte har KB4038801 installerat kan du använda följande PowerShell-kommando:
Set-ADFSProperties -EnableOAuthLogout $true
Anteckning
EnableOAuthLogout
parametern markeras som föråldrad när KB4038801har installerats.
EnableOAUthLogout
kommer alltid att vara sant och påverkar inte utloggningsfunktionen.
Obs
frontchannel_logout stöds endast efter installationen av KB4038801
Klientkonfiguration
Klienten måste implementera en URL som loggar ut den inloggade användaren. Administratören kan konfigurera LogoutUri i klientkonfigurationen med hjälp av följande PowerShell-cmdletar.
(Add | Set)-AdfsNativeApplication
(Add | Set)-AdfsServerApplication
(Add | Set)-AdfsClient
Set-AdfsClient -LogoutUri <url>
Den LogoutUri
är url:en som används av AF FS för att "logga ut" användaren. För att implementera LogoutUri
måste klienten se till att den rensar autentiseringstillståndet för användaren i programmet, till exempel genom att ta bort de autentiseringstoken som den har. AD FS bläddrar till den URL:en, med SID som frågeparameter, vilket signalerar att den förlitande parten/programmet loggar ut användaren.
- OAuth-token med sessions-ID: AD FS innehåller sessions-ID i OAuth-token vid tidpunkten för id_token tokenutfärding. Detta kommer att användas senare av AD FS för att identifiera de relevanta SSO-cookies som ska rensas för användaren.
- Användaren initierar utloggning på App1: Användaren kan initiera en utloggning från något av de inloggade programmen. I det här exempelscenariot initierar en användare en utloggning från App1.
- -programmet skickar utloggningsbegäran till AD FS: När användaren har initierat utloggningen skickar programmet en GET-begäran till end_session_endpoint för AD FS. Programmet kan också inkludera id_token_hint som en parameter i den här begäran. Om id_token_hint finns använder AD FS det tillsammans med sessions-ID för att ta reda på vilken URI som klienten ska omdirigeras till efter utloggningen (post_logout_redirect_uri). Post_logout_redirect_uri ska vara en giltig URI som registrerats med AD FS med parametern RedirectUris.
- AD FS skickar utloggning till inloggade klienter: AD FS använder sessionsidentifierarvärdet för att hitta relevanta klienter som användaren är inloggad på. De identifierade klienterna skickas en begäran till LogoutUri som är registrerat med AD FS för att initiera en utloggning på klientsidan.
Vanliga frågor och svar
Q: Jag ser inte parametrarna frontchannel_logout_supported och frontchannel_logout_session_supported i identifieringsdokumentet.
A: Kontrollera att du har KB4038801 installerat på alla AD FS-servrar. Se Enkel utloggning i Server 2016 med KB4038801.
Q: jag har konfigurerat enkel utloggning enligt anvisningarna, men användaren förblir inloggad på andra klienter.
A: Kontrollera att LogoutUri
har angetts för alla klienter där användaren är inloggad. AD FS gör också sitt bästa för att skicka en utloggningsbegäran till den registrerade LogoutUri
. Klienten måste implementera logik för att hantera begäran och vidta åtgärder för att logga ut användaren från programmet.
Q: Om en av klienterna efter utloggningen går tillbaka till AD FS med en giltig uppdateringstoken, kommer AD FS att utfärda en åtkomsttoken?
A: Ja. Det är klientprogrammets ansvar att släppa alla autentiserade objekt efter att en utloggningsbegäran har mottagits vid den registrerade LogoutUri
.