Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Overview
Basándose en la compatibilidad inicial con Oauth en AD FS en Windows Server 2012 R2, AD FS 2016 introdujo la compatibilidad con el inicio de sesión de OpenId Connect. With KB4038801, AD FS 2016 now supports single log-out for OpenId Connect scenarios. En este artículo se proporciona información general sobre el escenario de cierre de sesión único para OpenId Connect y se proporcionan instrucciones sobre cómo usarlo para las aplicaciones de OpenId Connect en AD FS.
Discovery doc
OpenID Connect usa un documento JSON denominado "Documento de detección" para proporcionar detalles sobre la configuración. Esto incluye los URI de autenticación, token, userinfo y puntos de conexión públicos. A continuación se muestra un ejemplo del documento de descubrimiento.
{
"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
}
Los siguientes valores adicionales estarán disponibles en el documento de detección para indicar la compatibilidad con Front Channel Logout:
- frontchannel_logout_supported: el valor será "true".
- frontchannel_logout_session_supported: el valor será "true".
- end_session_endpoint: este es el URI de cierre de sesión de OAuth que el cliente puede usar para iniciar el cierre de sesión en el servidor.
Configuración del servidor de AD FS
La propiedad EnableOAuthLogout de AD FS se habilitará de forma predeterminada. Esta propiedad indica al servidor de AD FS que busque la dirección URL (LogoutURI) con el SID para iniciar el cierre de sesión en el cliente. If you do not have KB4038801 installed you can use the following PowerShell command:
Set-ADFSProperties -EnableOAuthLogout $true
Note
EnableOAuthLogout
parameter will be marked as obsolete after installing KB4038801. EnableOAUthLogout
siempre será verdadero y no tendrá ningún impacto en la funcionalidad de cerrar sesión.
Note
frontchannel_logout is supported only after installation of KB4038801
Client configuration
El cliente debe implementar una dirección URL que "cierra la sesión" del usuario que ha iniciado sesión. El administrador puede configurar logoutUri en la configuración de cliente mediante los siguientes cmdlets de PowerShell.
(Add | Set)-AdfsNativeApplication
(Add | Set)-AdfsServerApplication
(Add | Set)-AdfsClient
Set-AdfsClient -LogoutUri <url>
LogoutUri
es la dirección URL que usa AF FS para "cerrar la sesión" del usuario. Para implementar LogoutUri
, el cliente debe asegurarse de que borra el estado de autenticación del usuario en la aplicación, por ejemplo, quitando los tokens de autenticación que tiene. AD FS navegará a esa dirección URL, con el SID como parámetro de consulta, señalizando a la parte confiable o aplicación que cierre la sesión del usuario.
- Token de OAuth con ID de sesión: AD FS incluye el ID de sesión en el token de OAuth en el momento de la emisión del token id_token. AD FS usará esto más adelante para identificar las cookies de SSO pertinentes que se van a limpiar para el usuario.
- El usuario inicia el cierre de sesión en App1: el usuario puede iniciar un cierre de sesión desde cualquiera de las aplicaciones que ha iniciado sesión. En este escenario de ejemplo, un usuario inicia un cierre de sesión desde App1.
- La aplicación envía una solicitud de cierre de sesión a AD FS: después de que el usuario inicie el cierre de sesión, la aplicación envía una solicitud GET a end_session_endpoint de AD FS. Opcionalmente, la aplicación puede incluir id_token_hint como parámetro para esta solicitud. Si id_token_hint está presente, AD FS lo usará junto con el identificador de sesión para averiguar a qué URI se debe redirigir el cliente después del cierre de sesión (post_logout_redirect_uri). El post_logout_redirect_uri debe ser un URI válido registrado con AD FS mediante el parámetro RedirectUris.
- AD FS envía el cierre de sesión a los clientes que han iniciado sesión: AD FS usa el valor de identificador de sesión para buscar los clientes pertinentes en los que el usuario ha iniciado sesión. A los clientes identificados se les envía una solicitud en el LogoutUri registrado en AD FS para iniciar un cierre de sesión en el lado cliente.
FAQs
Q: I do not see the frontchannel_logout_supported and frontchannel_logout_session_supported parameters in the discovery doc.
A: Ensure that you have KB4038801 installed on all the AD FS servers. Refer to Single log-out in Server 2016 with KB4038801.
Q: I have configured single logout as directed, but user stays logged-in on other clients.
A: Ensure that LogoutUri
is set for all the clients where the user is logged-in. Además, AD FS realiza el intento más favorable de enviar la solicitud de cierre de sesión en el registrado LogoutUri
. El cliente debe implementar lógica para controlar la solicitud y tomar medidas para cerrar la sesión del usuario desde la aplicación.
Q: If after logout, one of the clients goes back to AD FS with a valid refresh token, will AD FS issue an access token?
A: Yes. Es responsabilidad de la aplicación cliente quitar todos los artefactos autenticados después de recibir una solicitud de cierre de sesión en el registrado LogoutUri
.