Partager via


Déconnexion unique pour OpenID Connect avec AD FS

Vue d'ensemble

En s’appuyant sur la prise en charge initiale d’Oauth dans AD FS dans Windows Server 2012 R2, AD FS 2016 a introduit la prise en charge de l’authentification OpenId Connect. Avec KB4038801, AD FS 2016 prend désormais en charge la déconnexion unique pour les scénarios OpenId Connect. Cet article fournit une vue d’ensemble de la déconnexion unique pour le scénario OpenId Connect et fournit des conseils sur la façon de l’utiliser pour vos applications OpenId Connect dans AD FS.

Documentation de découverte

OpenID Connect utilise un document JSON appelé « document de découverte » pour fournir des détails sur la configuration. Cela inclut les URI de l’authentification, du jeton, des informations utilisateur et des points de terminaison publics. Voici un exemple du document de découverte.

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

Les valeurs supplémentaires suivantes seront disponibles dans la documentation de découverte pour indiquer la prise en charge de la déconnexion du canal frontal :

  • frontchannel_logout_supported : la valeur sera « true »
  • frontchannel_logout_session_supported : la valeur sera « true ».
  • end_session_endpoint : il s’agit de l’URI de déconnexion OAuth que le client peut utiliser pour lancer la déconnexion sur le serveur.

Configuration du serveur AD FS

La propriété AD FS EnableOAuthLogout est activée par défaut. Cette propriété indique au serveur AD FS de rechercher l’URL (LogoutURI) avec le SID pour lancer la déconnexion sur le client. Si KB4038801 n’est pas installé, vous pouvez utiliser la commande PowerShell suivante :

Set-ADFSProperties -EnableOAuthLogout $true

Notes

EnableOAuthLogout le paramètre sera marqué comme obsolète après l’installation de KB4038801. EnableOAUthLogout est toujours « true » et n’aura aucun impact sur la fonctionnalité de déconnexion.

Notes

frontchannel_logout est pris en charge uniquement après l’installation de KB4038801

Configuration de client

Le client doit implémenter une URL qui « se déconnecte » de l’utilisateur connecté. L’administrateur peut configurer LogoutUri dans la configuration du client à l’aide des cmdlets PowerShell suivantes.

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

LogoutUri est l’URL utilisée par AF FS pour « déconnecter » l’utilisateur. Pour implémenter LogoutUri, le client doit s’assurer qu’il efface l’état d’authentification de l’utilisateur dans l’application, par exemple en supprimant les jetons d’authentification dont il dispose. AD FS accède à cette URL, avec le SID comme paramètre de requête, signalant la partie de confiance / l’application pour se déconnecter de l’utilisateur.

AD FS log off user diagram

  1. Jeton OAuth avec ID de session : AD FS inclut l’ID de session dans le jeton OAuth au moment de l’émission du jeton id_token. Cela sera utilisé ultérieurement par AD FS pour identifier les cookies d’authentification unique pertinents à nettoyer pour l’utilisateur.
  2. L’utilisateur lance la déconnexion sur App1 : l’utilisateur peut lancer une déconnexion à partir de n’importe quelle application connectée. Dans cet exemple de scénario, un utilisateur lance une déconnexion à partir d’App1.
  3. L’application envoie une demande de déconnexion à AD FS : une fois que l’utilisateur a lancé la déconnexion, l’application envoie une requête GET à end_session_endpoint d’AD FS. L’application peut éventuellement inclure id_token_hint en tant que paramètre pour cette requête. Si id_token_hint est présente, AD FS l’utilise conjointement avec l’ID de session pour déterminer l’URI vers lequel le client doit être redirigé après la déconnexion (post_logout_redirect_uri). Le post_logout_redirect_uri doit être un URI valide inscrit auprès d’AD FS à l’aide du paramètre RedirectUris.
  4. AD FS envoie la déconnexion aux clients connectés : AD FS utilise la valeur d’identificateur de session pour rechercher les clients appropriés auxquels l’utilisateur est connecté. Une demande est envoyée aux clients identifiés sur le LogoutUri inscrit auprès d’AD FS pour lancer une déconnexion côté client.

FAQ

Q : Je ne vois pas les paramètres frontchannel_logout_supported et frontchannel_logout_session_supported dans la documentation de découverte.
R : Vérifiez que KB4038801 est installé sur tous les serveurs AD FS. Reportez-vous à Déconnexion unique dans Server 2016 avec KB4038801.

Q : J’ai configuré la déconnexion unique comme indiqué, mais l’utilisateur reste connecté à d’autres clients.
R : Vérifiez que LogoutUri est défini pour tous les clients où l’utilisateur est connecté. En outre, AD FS tente au mieux d’envoyer la demande de déconnexion sur le LogoutUri inscrit. Le client doit implémenter la logique pour gérer la demande et prendre des mesures pour déconnecter l’utilisateur de l’application.

Q : Si, après la déconnexion, l’un des clients revient à AD FS avec un jeton d’actualisation valide, AD FS émettra-t-il un jeton d’accès ?
R : Oui. Il incombe à l’application cliente de supprimer tous les artefacts authentifiés après la réception d’une demande de déconnexion au niveau du LogoutUri inscrit.

Étapes suivantes

Développement des services AD FS