Projet

Général

Profil

Development #9865

Gérer les déconnexions

Ajouté par Benjamin Dauvergne il y a environ 8 ans. Mis à jour il y a environ 8 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Josué Kouka
Catégorie:
MandayeJS
Version cible:
-
Début:
03 février 2016
Echéance:
% réalisé:

100%

Temps estimé:
Patch proposed:
Oui
Planning:

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

Révision b43fe318 (diff)
Ajouté par Josué Kouka il y a environ 8 ans

merge local and idp logout (#9865)

Historique

#1

Mis à jour par Josué Kouka il y a environ 8 ans

  • Assigné à mis à Josué Kouka

Benjamin Dauvergne a écrit :

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).

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 :
  • 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.

#2

Mis à jour par Benjamin Dauvergne il y a environ 8 ans

Josué Kouka a écrit :

Benjamin Dauvergne a écrit :

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).

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 :
  • 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.

Je pesne qu'il faut garder à l'esprit qu'un utilisateur peut se connecter à une application sans SSO.

Oui, il y a 3 cas:
  • 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)
#3

Mis à jour par Josué Kouka il y a environ 8 ans

  • Statut changé de Nouveau à En cours
#4

Mis à jour par Josué Kouka il y a environ 8 ans

Une sorte de prepatch. Il me reste des tests sur les autres app déja "mandayisées" pour la capture de déconnexion locale.

#5

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).

#6

Mis à jour par Josué Kouka il y a environ 8 ans

Juste un aperçu de ce sur quoi je suis parti. C'est ok pour :
  • 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)

#7

Mis à jour par Josué Kouka il y a environ 8 ans

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.

#8

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).

#9

Mis à jour par Josué Kouka il y a environ 8 ans

Effectivement, ça marche mieux avec un window.location

#10

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.

#11

Mis à jour par Josué Kouka il y a environ 8 ans

quelque chose du genre j'imagine

#12

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;
});
#13

Mis à jour par Josué Kouka il y a environ 8 ans

  • Fichier 0001-merge-local-and-idp-logout-9865.patch.bk ajouté
#14

Mis à jour par Josué Kouka il y a environ 8 ans

  • Fichier 0001-merge-local-and-idp-logout-9865.patch.bk supprimé
#16

Mis à jour par Benjamin Dauvergne il y a environ 8 ans

Ack.

#17

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
#18

Mis à jour par Benjamin Dauvergne il y a environ 8 ans

  • Statut changé de Résolu (à déployer) à Fermé

Formats disponibles : Atom PDF