Jednotné odhlášení z OpenID Connect pomocí služby AD FS
Přehled
Služba AD FS ve Windows Serveru 2012 R2 zavedla počáteční podporu pro OAuth a AD FS 2016 přidala podporu pro přihlašování pomocí OpenId Connect. Díky KB4038801teď služba AD FS 2016 podporuje jednotné odhlášení pro scénáře OpenId Connect. Tento článek obsahuje přehled jediného scénáře odhlášení pro OpenId Connect a obsahuje pokyny, jak ho používat pro aplikace OpenId Connect ve službě AD FS.
Dokumentace ke zjišťování
OpenID Connect používá k zadání podrobností o konfiguraci dokument JSON s názvem "Dokument zjišťování". To zahrnuje identifikátory URI autentizace, tokenu, informace o uživateli a veřejné koncové body. Následuje příklad dokumentu pro zjišťování.
{
"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
}
V dokumentu pro objevování budou k dispozici následující hodnoty, které označují podporu pro Front Channel Logout:
- frontchannel_logout_supported: hodnota bude 'pravda'
- frontchannel_logout_session_supported: hodnota bude „true“.
- end_session_endpoint: jedná se o identifikátor URI odhlášení OAuth, který může klient použít k zahájení odhlášení na serveru.
Konfigurace serveru AD FS
Vlastnost AD FS EnableOAuthLogout bude ve výchozím nastavení povolená. Tato vlastnost říká serveru SLUŽBY AD FS, aby vyhledal adresu URL (LogoutURI) s identifikátorem SID a inicioval odhlášení u klienta. Pokud nemáte nainstalované KB4038801, můžete použít následující příkaz PowerShellu:
Set-ADFSProperties -EnableOAuthLogout $true
Poznámka
EnableOAuthLogout
parametr bude po instalaci KB4038801označen jako zastaralý .
EnableOAUthLogout
bude vždy true a nebude mít žádný vliv na funkci odhlášení.
Poznámka
frontchannel_logout se podporuje jenom po instalaci KB4038801
Konfigurace klienta
Klient musí implementovat adresu URL, která "odhlásí" přihlášeného uživatele. Správce může nakonfigurovat LogoutUri v konfiguraci klienta pomocí následujících rutin PowerShellu.
(Add | Set)-AdfsNativeApplication
(Add | Set)-AdfsServerApplication
(Add | Set)-AdfsClient
Set-AdfsClient -LogoutUri <url>
LogoutUri
je adresa URL, kterou služba AF FS používá k "odhlášení" uživatele. Pro implementaci LogoutUri
musí klient zajistit, aby vymazal stav ověřování uživatele v aplikaci, například odstraněním ověřovacích tokenů, které vlastní. Služba AD FS přejde na tuto adresu URL s identifikátorem SID jako parametrem dotazu, který signalizuje spoléhající se straně nebo aplikaci, aby odhlásila uživatele.
- token OAuth s relace s ID: Služba AD FS zahrnuje ID relace do tokenu OAuth při vydání tokenu id_token. Služba AD FS ho použije později k identifikaci příslušných uživatelských souborů cookie jednotného přihlašování, které se mají vyčistit.
- Uživatel zahájí odhlášení v aplikaci App1: Uživatel může zahájit odhlášení z některé z přihlášených aplikací. V tomto ukázkovém scénáři uživatel zahájí odhlášení z aplikace App1.
- Aplikace odešle žádost o odhlášení do služby AD FS: Jakmile uživatel zahájí odhlášení, aplikace odešle požadavek GET na end_session_endpoint služby AD FS. Aplikace může volitelně zahrnout id_token_hint jako parametr pro tento požadavek. Pokud je přítomen id_token_hint, služba AD FS jej použije společně s ID relace ke zjištění identifikátoru URI, na který se má klient přesměrovat po odhlášení (post_logout_redirect_uri). Post_logout_redirect_uri by měl být platný identifikátor URI zaregistrovaný ve službě AD FS pomocí parametru RedirectUris.
- služba AD FS odesílá odhlašování přihlášeným klientům: Služba AD FS používá hodnotu identifikátoru relace k vyhledání příslušných klientů, ke kteří se uživatel přihlašuje. Klientům, kteří byli identifikováni, je odeslána žádost na LogoutUri zaregistrovaného v AD FS pro zahájení odhlášení na jejich straně.
Nejčastější dotazy
Q: V dokumentu pro vyhledání se nezobrazují parametry frontchannel_logout_supported a frontchannel_logout_session_supported.
A: Ujistěte se, že máte nainstalovaný KB4038801 na všech serverech AD FS. Projděte si jednotné odhlášení na Serveru 2016 s KB4038801.
Q: Nakonfiguroval jsem jednoduché odhlášení podle pokynů, ale uživatel zůstává přihlášen u jiných klientů.
A: Ujistěte se, že LogoutUri
je nastaveno pro všechny klienty, kde je uživatel přihlášen. Služba AD FS rovněž vynaloží maximální snahu odeslat žádost o odhlášení na zaregistrované LogoutUri
. Klient musí implementovat logiku pro zpracování požadavku a provedení akce pro odhlášení uživatele z aplikace.
Q: Pokud po odhlášení se jeden z klientů vrátí do služby AD FS s platným obnovovacím tokenem, vydá služba AD FS přístupový token?
A: Ano. Za vyřazení všech ověřených artefaktů po přijetí žádosti o odhlášení v registrovaném LogoutUri
zodpovídá klientská aplikace.