3 votes

Problème de déconnexion du canal arrière de l'IdentityServer4

Utilisation d'IdentityServer4 sur ASP.NET Core 2. Deux clients pertinents pour ce cas d'utilisation utilisant ASP.NET MVC5.

EDIT : Utilisation de cookies pour l'authentification, flux implicite.

En utilisant le panneau "back-channel" comme ça :
* Il y a 4 applications impliquées - deux clients (appelons-les client A et client B), une instance d'IdentityServer et un serveur d'état pour garder la trace des demandes de déconnexion par le canal arrière.

  1. Le client A lance la déconnexion, invalide le cookie de connexion.
  2. Client Un utilisateur est redirigé vers le site /account/logout de IdentityServer avec un id_token correct.
  3. Le serveur d'identité invalide le cookie de connexion et appelle les actions de déconnexion par le canal arrière pour tous les clients connectés.
  4. L'action de déconnexion par le canal arrière du client B valide la demande et notifie la demande de déconnexion au serveur d'état.
  5. Lors de la demande suivante vers le client B, ce dernier interroge le serveur d'état et obtient des informations sur une demande de déconnexion en suspens, ce qui l'amène à invalider le cookie de déconnexion, et donc à réussir la déconnexion.

Le serveur d'état garde la trace de ces deux paramètres : sub y sid réclamations à partir de id_token.

Je rencontre le problème suivant :

Lorsque des utilisateurs se connectent à un client A, puis se rendent sur le client B et y effectuent la déconnexion, le client B est déconnecté, mais pas le client A jusqu'à la prochaine demande qui lui est adressée. Ainsi, si les utilisateurs décident de se connecter au client B avec un autre compte (ou le même, peu importe) et de naviguer ensuite vers le client A, le client A lancera la déconnexion parce qu'il y avait une demande de déconnexion en attente sur le serveur d'état, sans tenir compte du fait que les utilisateurs se sont reconnectés entre-temps.

Quelqu'un a-t-il une idée sur la façon d'éviter cela ?

1voto

d_f Points 490

Si l'on suit votre scénario, je ne vois aucun problème lorsque votre client A effectue un "lazy sign-out" qui déclenche un nouveau défi à IdSrv, se terminant par un nouveau token et un nouveau cookie.
L'essentiel est de ne pas déclencher une sortie unique (cyclique) à chaque "sortie paresseuse".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X