Projet

Général

Profil

Development #67090

saml: lier la session en cours à celle de l'IdP

Ajouté par Benjamin Dauvergne il y a presque 2 ans. Mis à jour il y a plus d'un an.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
06 juillet 2022
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Comme #66747 et #67084 sur django-mellon.

PS: en plus le SSO passif ne marche plus du tout en fait.


Fichiers

0003-tests-use-cookie-name-in-get_session-app-67090.patch (1,3 ko) 0003-tests-use-cookie-name-in-get_session-app-67090.patch Benjamin Dauvergne, 06 juillet 2022 19:19
0001-misc-retry-passive-sso-when-session-expire-and-logou.patch (7,07 ko) 0001-misc-retry-passive-sso-when-session-expire-and-logou.patch Benjamin Dauvergne, 06 juillet 2022 19:19
0002-saml2-store-current-value-of-OPENED_SESSION_COOKIE-i.patch (1,62 ko) 0002-saml2-store-current-value-of-OPENED_SESSION_COOKIE-i.patch Benjamin Dauvergne, 06 juillet 2022 19:19
0005-test-modify-test-to-test-on-a-real-form-67090.patch (3,42 ko) 0005-test-modify-test-to-test-on-a-real-form-67090.patch Benjamin Dauvergne, 15 décembre 2022 17:41
0004-tests-use-cookie-name-in-get_session-app-67090.patch (1,29 ko) 0004-tests-use-cookie-name-in-get_session-app-67090.patch Benjamin Dauvergne, 15 décembre 2022 17:41
0003-saml2-store-current-value-of-OPENED_SESSION_COOKIE-i.patch (1,62 ko) 0003-saml2-store-current-value-of-OPENED_SESSION_COOKIE-i.patch Benjamin Dauvergne, 15 décembre 2022 17:41
0001-misc-replace-deprecated-distutils-features-by-setupt.patch (2,06 ko) 0001-misc-replace-deprecated-distutils-features-by-setupt.patch Benjamin Dauvergne, 15 décembre 2022 17:41
0002-misc-retry-passive-sso-when-session-expire-and-logou.patch (7,06 ko) 0002-misc-retry-passive-sso-when-session-expire-and-logou.patch Benjamin Dauvergne, 15 décembre 2022 17:41
0005-test-modify-test-to-test-on-a-real-form-67090.patch (3,51 ko) 0005-test-modify-test-to-test-on-a-real-form-67090.patch Benjamin Dauvergne, 15 décembre 2022 17:55
0004-tests-use-cookie-name-in-get_session-app-67090.patch (1,29 ko) 0004-tests-use-cookie-name-in-get_session-app-67090.patch Benjamin Dauvergne, 15 décembre 2022 17:55
0003-saml2-store-current-value-of-OPENED_SESSION_COOKIE-i.patch (1,62 ko) 0003-saml2-store-current-value-of-OPENED_SESSION_COOKIE-i.patch Benjamin Dauvergne, 15 décembre 2022 17:55
0001-misc-replace-deprecated-distutils-features-by-setupt.patch (2,06 ko) 0001-misc-replace-deprecated-distutils-features-by-setupt.patch Benjamin Dauvergne, 15 décembre 2022 17:55
0002-misc-retry-passive-sso-when-session-expire-and-logou.patch (7,06 ko) 0002-misc-retry-passive-sso-when-session-expire-and-logou.patch Benjamin Dauvergne, 15 décembre 2022 17:55
0002-tests-use-cookie-name-in-get_session-app-67090.patch (1,1 ko) 0002-tests-use-cookie-name-in-get_session-app-67090.patch Benjamin Dauvergne, 20 décembre 2022 11:17
0001-misc-improve-passive-sso-on-state-change-67090.patch (9,27 ko) 0001-misc-improve-passive-sso-on-state-change-67090.patch Benjamin Dauvergne, 20 décembre 2022 11:17
0003-test-modify-test-to-test-on-a-real-form-67090.patch (3,51 ko) 0003-test-modify-test-to-test-on-a-real-form-67090.patch Benjamin Dauvergne, 20 décembre 2022 11:17
0004-test-modify-test-to-test-on-a-real-form-67090.patch (3,51 ko) 0004-test-modify-test-to-test-on-a-real-form-67090.patch Benjamin Dauvergne, 23 décembre 2022 11:01
0003-tests-use-cookie-name-in-get_session-app-67090.patch (1,1 ko) 0003-tests-use-cookie-name-in-get_session-app-67090.patch Benjamin Dauvergne, 23 décembre 2022 11:01
0002-misc-improve-passive-sso-on-state-change-67090.patch (9,69 ko) 0002-misc-improve-passive-sso-on-state-change-67090.patch Benjamin Dauvergne, 23 décembre 2022 11:01
0001-misc-let-django-generate-set-cookies-headers-72613.patch (8,05 ko) 0001-misc-let-django-generate-set-cookies-headers-72613.patch Benjamin Dauvergne, 23 décembre 2022 11:01

Demandes liées

Lié à django-mellon - Development #66747: middleware: utiliser la valeur du cookie MELLON_OPENED_SESSION comme référence à la session globale en coursFermé28 juin 2022

Actions
Lié à django-mellon - Development #67084: middleware: retiré MELLON_PASSIVE_TRIED si on est connectéFermé06 juillet 2022

Actions
Lié à w.c.s. - Development #72613: Problème avec plusieurs Set-cookie dans le code conversion Quixote et DjangoFermé19 décembre 2022

Actions

Révisions associées

Révision 6a4cea8b (diff)
Ajouté par Benjamin Dauvergne il y a plus d'un an

misc: improve passive sso on state change (#67090)

- automatic_sso is renamed try_passive_sso to be clearer on the goal of
the method,
- test for possible passive sso is now done before rendering the current
page,
- on a succesfull SSO if <idp_session_cookie_name> cookie is present,
its value is saved in the Quixote session,
- behaviour of try_passive_sso is changed:
- if user is logged in or <idp_session_cookie_name> cookie value
differs from the value in '*-passive-auth-tried' cookie, the
'*-passive-auth-tried' cookie is expired,
- if user is logged and <idp_session_cookie_name> cookie cookie value
differs from the one saved in the Quixote session, user is logged
out, if not treatment stop here.
- if the <idp_session_cookie_name> cookie cookie is not valued or if
its value is equal to '*-passive-auth-tried' cookie, treatment stops
here,
- if the <idp_session_cookie_name> cookie is valued and its value
differs from the '*-passive-auth-tried' cookie cookie value, then
'*-passive-auth-tried' cookie is set to the value of
<idp_session_cookie_name> cookie and a passive SSO is tried.

Révision bc4d9e17 (diff)
Ajouté par Benjamin Dauvergne il y a plus d'un an

tests: use cookie name in get_session(app) (#67090)

Révision 8880ab0d (diff)
Ajouté par Benjamin Dauvergne il y a plus d'un an

test: modify test to test on a real form (#67090)

Historique

#2

Mis à jour par Frédéric Péters il y a presque 2 ans

Les tickets cités manquent de contexte, offrent juste une explication technique de ce que font les patchs, c'est pour répondre à quel problème ?

#3

Mis à jour par Benjamin Dauvergne il y a presque 2 ans

Frédéric Péters a écrit :

Les tickets cités manquent de contexte, offrent juste une explication technique de ce que font les patchs, c'est pour répondre à quel problème ?

Deux problèmes différents :
1. se trouver sur w.c.s. non connecté alors qu'une session existe sur authentic (ça arrive si la session coté w.c.s. expire avant celle d'authentic, ce qui est normalement garanti même), dans ce cas le cookie PASSIVE_TRIED_COOKIE était toujours présent empêchant de relancer un SSO passif (ce qui rallonge la session coté IdP, etc...),
2. se trouver connecté sur w.c.s avec un utilisateur différent de celui avec lequel on est connecté sur authentic (le SLO a foiré, le cookie sur authentic a expiré avant celui de w.c.s. pour une raison x ou y) ou alors qu'on est plus connecté sur authentic.

Ça corrige les deux problèmes, le code est quasi identique à celui du middleware qui fait ça dans django-melon.

Ce sont des choses remontés par des tickets GLC lors des tests de GLCPRO (ça concernait surtout combo mais le problème est présent sur w.c.s. aussi).

#4

Mis à jour par Benjamin Dauvergne il y a plus d'un an

  • Lié à Development #66747: middleware: utiliser la valeur du cookie MELLON_OPENED_SESSION comme référence à la session globale en cours ajouté
#6

Mis à jour par Benjamin Dauvergne il y a plus d'un an

  • Lié à Development #67084: middleware: retiré MELLON_PASSIVE_TRIED si on est connecté ajouté
#7

Mis à jour par Benjamin Dauvergne il y a plus d'un an

Pour référence le ticket #65431 parle d'une session ouverte sur le portail alors qu'il n'y en a plus sur authentic, mais le même comportement était observé sur w.c.s.

#8

Mis à jour par Benjamin Dauvergne il y a plus d'un an

Rebasé.

#10

Mis à jour par Benjamin Dauvergne il y a plus d'un an

  • Tracker changé de Development à Bug
  • Description mis à jour (diff)
#12

Mis à jour par Frédéric Péters il y a plus d'un an

Il y a cinq patchs attachés mais dans la branche il y a 4 commits ? (ok... c'est 0001 qui s'est perdu ici).

Le sujet du commit 0002 est bien trop long.

Dans ce qui semble un changement d'indentation se glisse au moins une modification (secure=request.scheme == 'https'), ça aiderait la relecture de pointer ce qu'il pourrait y avoir d'autre.

Dans 0003 idéalement les nouveaux attributs sont intégrés dans has_info().

Dans 0004 au-delà de la description donnée dans le sujet il y a un ignore_errors=True qui s'est glissé.

#13

Mis à jour par Benjamin Dauvergne il y a plus d'un an

Frédéric Péters a écrit :

Le sujet du commit 0002 est bien trop long.

Ok, je revois ça.

Dans ce qui semble un changement d'indentation se glisse au moins une modification (secure=request.scheme 'https'), ça aiderait la relecture de pointer ce qu'il pourrait y avoir d'autre.

J'ai mergé 0003 dans 0002, les deux ne fonctionnent pas sans l'autre de toute façon et j'ai réduit le titre du commit et mis une description plus exhaustive des changements de comportement.

Le changement secure.request.scheme 'https' c'est pour que ça fonctionne dans les tests: comme webtest simule des requêtes http cookiejar refusait de servir les cookies.

Dans 0003 idéalement les nouveaux attributs sont intégrés dans has_info().

Ok je l'ajoute pour la forme, de fait sur un login il y a tellement de choses qui changent dans la session qu'elle est toujours sauvée (ce mécanisme has_info n'est pas terrible, un jour il faudra voir à faire un truc plus proche de ce que fait Django qui essaye de détecter les modifications).

Dans 0004 au-delà de la description donnée dans le sujet il y a un ignore_errors=True qui s'est glissé.

Ce changement est retiré, ça n'est pas/plus nécessaire, j'ai bataillé avec les cookies de session, c'est devenu #72613 (la branche est rebasée sur #72613).

#15

Mis à jour par Frédéric Péters il y a plus d'un an

+            OPENED_SESSION_COOKIE = get_publisher().get_site_option('idp_session_cookie_name')
+            if OPENED_SESSION_COOKIE:
+                if OPENED_SESSION_COOKIE in get_request().cookies:
+                    session.opened_session_value = get_request().cookies[OPENED_SESSION_COOKIE]

Tant qu'à avoir tout ce code qui change (ici et ailleurs), ça pourrait être l'occasion pour écrire en minuscules, comme des variables classiques ? (ça aurait en bonus de sans doute produire un diff plus lisible, qui n'intercalerait pas quelques lignes d'ancien code au milieu du nouveau).

Sur le fond j'ai un peu peur de la partie

  - if user is logged and IDP_OPENED_SESSION cookie value differs from
    the one saved in the Quixote session, user is logged out, if not
    treatment stop here.

mais elle existe dans django-mellon et ça semble passer là, donc ok.

#17

Mis à jour par Frédéric Péters il y a plus d'un an

  • Lié à Development #72613: Problème avec plusieurs Set-cookie dans le code conversion Quixote et Django ajouté
#18

Mis à jour par Frédéric Péters il y a plus d'un an

  • Statut changé de Solution proposée à Résolu (à déployer)
commit 8880ab0d6a06cc622748a1beb7bc667ed395418d
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date:   Thu Dec 15 17:32:25 2022 +0100

    test: modify test to test on a real form (#67090)

commit bc4d9e17f10065d6774fd0aeea8492c42ad95c44
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date:   Wed Jul 6 19:02:23 2022 +0200

    tests: use cookie name in get_session(app) (#67090)

commit 6a4cea8b30c7a3d47f4bb0030c182005c07d8554
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date:   Wed Jul 6 19:06:03 2022 +0200

    misc: improve passive sso on state change (#67090)

    - automatic_sso is renamed try_passive_sso to be clearer on the goal of
      the method,
    - test for possible passive sso is now done before rendering the current
      page,
    - on a succesfull SSO if <idp_session_cookie_name> cookie is present,
      its value is saved in the Quixote session,
    - behaviour of try_passive_sso is changed:
      - if user is logged in or <idp_session_cookie_name> cookie value
        differs from the value in '*-passive-auth-tried' cookie, the
        '*-passive-auth-tried' cookie is expired,
      - if user is logged and <idp_session_cookie_name> cookie cookie value
        differs from the one saved in the Quixote session, user is logged
        out, if not treatment stop here.
      - if the <idp_session_cookie_name> cookie cookie is not valued or if
        its value is equal to '*-passive-auth-tried' cookie, treatment stops here,
      - if the <idp_session_cookie_name> cookie is valued and its value
        differs from the '*-passive-auth-tried' cookie cookie value, then
        '*-passive-auth-tried' cookie is set to the value of
        <idp_session_cookie_name> cookie and a passive SSO is tried.
#19

Mis à jour par Transition automatique il y a plus d'un an

  • Statut changé de Résolu (à déployer) à Solution déployée
#20

Mis à jour par Robot Gitea il y a plus d'un an

  • Assigné à changé de Benjamin Dauvergne à Frédéric Péters
#21

Mis à jour par Robot Gitea il y a plus d'un an

Frédéric Péters (fpeters) a lié une pull request sur Gitea concernant cette demande :

#22

Mis à jour par Robot Gitea il y a plus d'un an

Frédéric Péters (fpeters) a mergé une pull request sur Gitea concernant cette demande :

#23

Mis à jour par Transition automatique il y a environ un an

Automatic expiration

Formats disponibles : Atom PDF