Development #9865
Gérer les déconnexions
100%
Description
Il faut que lors d'une demande déconnexion locale soit via le bouton de la barre soit via un bouton existant de l'application, les cookies de l'application soit supprimés et le logout local de l'applicatif soit appelé (pour que les sessions soient effectivement supprimés en base, si possible).
Pour cela il va falloir surcharger la vue LogoutView de django-mellon pour y ajouter la suppression des cookies ainsi qu'un éventuel appel GET à la vue de logout de l'application en utilisant les cookies présents; ces opérations sont à faire avant l'émission d'un SLO initié par le SP et lors de la réception d'un SLO initié par l'IdP (il faudra peut-être modifié django-mellon pour prévoir des points d'extension dans cette vue).
Par ailleurs pour permettre aux liens/boutons natifs de l'application de déclencher des SLO il faudra prévoie dans mandaye.js de quoi intercepter les clicks sur ces boutons/liens et en faire des liens vers la vue de déconnexion de mandayejs.
Fichiers
Révisions associées
Historique
Mis à jour par Josué Kouka il y a environ 8 ans
- Assigné à mis à Josué Kouka
Benjamin Dauvergne a écrit :
J'ai un peu de mal à comprendre tout cela. Sur la barre mandaye il n'y a pas de bouton de déconnexion à l'application locale. Peut etre que les noms des liens ne sont pas très parlant :Il faut que lors d'une demande déconnexion locale soit via le bouton de la barre soit via un bouton existant de l'application, les cookies de l'application soit supprimés et le logout local de l'applicatif soit appelé (pour que les sessions soient effectivement supprimés en base, si possible).
- se dissocier : supprimer la liaison entre mon compte GRU et mon compte local ?
- se deconnecter : me déconnecter de mon compte GRU ?
Généralement quand l'utilisateur clique sur le bouton de déconnexion de l'application locale, l'application se charge de terminer sa session.
Pour cela il va falloir surcharger la vue LogoutView de django-mellon pour y ajouter la suppression des cookies ainsi qu'un éventuel appel GET à la vue de logout de l'application en utilisant les cookies présents; ces opérations sont à faire avant l'émission d'un SLO initié par le SP et lors de la réception d'un SLO initié par l'IdP (il faudra peut-être modifié django-mellon pour prévoir des points d'extension dans cette vue).
Par ailleurs pour permettre aux liens/boutons natifs de l'application de déclencher des SLO il faudra prévoir dans mandaye.js de quoi intercepter les clicks sur ces boutons/liens et en faire des liens vers la vue de déconnexion de mandayejs.
Je pense que ce point ne permet pas de couvrir le cas où l'utilisateur s'est connecté sans passer par son compte GRU et en se déconnectant de l'application locale, il n'ait pas forcément envie de se déconnecter de son compte GRU.
Je pesne qu'il faut garder à l'esprit qu'un utilisateur peut se connecter à une application sans SSO.
Mis à jour par Benjamin Dauvergne il y a environ 8 ans
Josué Kouka a écrit :
Benjamin Dauvergne a écrit :
J'ai un peu de mal à comprendre tout cela. Sur la barre mandaye il n'y a pas de bouton de déconnexion à l'application locale. Peut etre que les noms des liens ne sont pas très parlant :Il faut que lors d'une demande déconnexion locale soit via le bouton de la barre soit via un bouton existant de l'application, les cookies de l'application soit supprimés et le logout local de l'applicatif soit appelé (pour que les sessions soient effectivement supprimés en base, si possible).
- se dissocier : supprimer la liaison entre mon compte GRU et mon compte local ?
- se deconnecter : me déconnecter de mon compte GRU ?
Non se déconnecter, ce n'est pas se déconnecter de mon compte GRU, c'est du SLO i.e. se déconnecter de tout ce à quoi on est connecté via le compte GRU.
Généralement quand l'utilisateur clique sur le bouton de déconnexion de l'application locale, l'application se charge de terminer sa session.
Dans le cadre d'un raccordement mandaye on fait converger tous les boutons de déconnexion, ils provoquent tous un SLO, c'est plus simple. Expliquer aux gens qu'il y a deux types de déconnexion est impossible.
Pour cela il va falloir surcharger la vue LogoutView de django-mellon pour y ajouter la suppression des cookies ainsi qu'un éventuel appel GET à la vue de logout de l'application en utilisant les cookies présents; ces opérations sont à faire avant l'émission d'un SLO initié par le SP et lors de la réception d'un SLO initié par l'IdP (il faudra peut-être modifié django-mellon pour prévoir des points d'extension dans cette vue).
Par ailleurs pour permettre aux liens/boutons natifs de l'application de déclencher des SLO il faudra prévoir dans mandaye.js de quoi intercepter les clicks sur ces boutons/liens et en faire des liens vers la vue de déconnexion de mandayejs.
Je pense que ce point ne permet pas de couvrir le cas où l'utilisateur s'est connecté sans passer par son compte GRU et en se déconnectant de l'application locale, il n'ait pas forcément envie de se déconnecter de son compte GRU.
À toi de noter dans la session si la session Django de mandayejs si la session actuelle a été ouverte avec la GRU ou pas, et de réagir en conséquence, il suffit de poser un request.session['do_slo'] = True
dans do_login
.
Oui, il y a 3 cas:Je pesne qu'il faut garder à l'esprit qu'un utilisateur peut se connecter à une application sans SSO.
- session applicative ouverte avec le compte GRU -> SLO
- session applicative ouverte indépendamment du compte GRU mais session GRU ouverte -> logout local
- session applicative ouverte indépendamment du compte GRU et pas de session GRU ouverte -> logout local (et de toute façon en appelant mellon_legout ça ne fera rien)
Mis à jour par Josué Kouka il y a environ 8 ans
- Fichier 0001-merge-local-and-idp-logout-9865.patch 0001-merge-local-and-idp-logout-9865.patch ajouté
- Tracker changé de Bug à Development
- Patch proposed changé de Non à Oui
Une sorte de prepatch. Il me reste des tests sur les autres app déja "mandayisées" pour la capture de déconnexion locale.
Mis à jour par Benjamin Dauvergne il y a environ 8 ans
Il faudrait voir comment émettre le logout jusqu'à l'application car supprimer le cookie n'est pas suffisant en général (il faut faire le GET ou POST sur l'URL de logout de l'applicatif aussi).
Mis à jour par Josué Kouka il y a environ 8 ans
- Fichier 0001-merge-local-and-idp-logout-9865.patch 0001-merge-local-and-idp-logout-9865.patch ajouté
- Imuse ( meme en get ça passe, mais bon )
- Archimed
- Duonet ( je suis encore en recherche du lien de déconnexion, un encodage b64 je pensais, apparement non )
- Arpège
Je pense qu'il faudrait que je commence à documenter tout cela. (Les codes javascript sont tellement bizarre que J'en ai juste mal à la tete)
Mis à jour par Josué Kouka il y a environ 8 ans
- Fichier 0001-merge-local-and-idp-logout-9865.patch 0001-merge-local-and-idp-logout-9865.patch ajouté
J'ai abondonné l'idée de partir avec des SITE_LOGOUT_SETTINGS en faveur de phantomjs. Les logouts des différentes apps mandayisées provoquent bien un slo.
Mis à jour par Benjamin Dauvergne il y a environ 8 ans
PhantomJS nickel.
Par contre j'ai comme un doute sur:
$.get('/_mandaye/logout/', function(){});
comme va se se dérouler la redirection vers l'IdP si c'est dans un appel Ajax ? Sachant que l'IdP doit afficher une page de déconnexion (pour propager la déconnexion aux autres fournisseurs de service).
Mis à jour par Josué Kouka il y a environ 8 ans
- Fichier 0001-merge-local-and-idp-logout-9865.patch 0001-merge-local-and-idp-logout-9865.patch ajouté
Effectivement, ça marche mieux avec un window.location
Mis à jour par Benjamin Dauvergne il y a environ 8 ans
Est-ce qu'il ne faut pas renvoyer false aussi ? Dans le cas d'un changement de window.location je ne sais pas si le gestionnaire d'évènement peut quand même s'exécuter mais sait-on jamais.
Mis à jour par Josué Kouka il y a environ 8 ans
- Fichier 0001-merge-local-and-idp-logout-9865.patch 0001-merge-local-and-idp-logout-9865.patch ajouté
quelque chose du genre j'imagine
Mis à jour par Benjamin Dauvergne il y a environ 8 ans
Are you sure ? :)
$(function(){ if (typeof(mandaye_logout_locator) === 'undefined') return false; $(mandaye_logout_locator).click(function(){ console.log("launching slo"); window.location = '/_mandaye/logout/'; }); return false; });
Mis à jour par Josué Kouka il y a environ 8 ans
- Fichier 0001-merge-local-and-idp-logout-9865.patch.bk ajouté
Mis à jour par Josué Kouka il y a environ 8 ans
- Fichier
0001-merge-local-and-idp-logout-9865.patch.bksupprimé
Mis à jour par Josué Kouka il y a environ 8 ans
Mis à jour par Josué Kouka il y a environ 8 ans
- Statut changé de En cours à Résolu (à déployer)
- % réalisé changé de 0 à 100
Mis à jour par Benjamin Dauvergne il y a environ 8 ans
- Statut changé de Résolu (à déployer) à Fermé
merge local and idp logout (#9865)