Support #40175
bookmark de page de connexion avec ?nonce= dedans
0%
Description
Je vais sur le portail agent, il me redirige vers <authentic>/login/?nonce=_51678...&service=portal-agent...&next=/idp/saml2/continue%3Fnonce%3D_51678..., je mets cette adresse en bookmark.
J'utilise mon bookmark une semaine plus tard, ça échoue avec un message "request has expired", le nonce étant expiré.
~~
On pourrait détecter à l'affichage de la page de connexion que le nonce est expiré et le zapper et il faudrait aussi zapper le ?next=, mais résultat l'agent pourra se connecter mais il sera envoyé sur le portail usager. (déjà mieux qu'avoir le "request has expired).
Plus loin, on pourrait aussi profiter de service=portail-agent dans la query string, pour savoir qu'après authentification il faut lancer un SSO initié par l'IdP vers le service en question. (pour les services/protocoles où un SSO initié par l'IdP est possible).
Historique
Mis à jour par Benjamin Dauvergne il y a environ 4 ans
Pour l'instant il faut juste ne pas bookmarker cette page... actuellement on a aucun moyen de savoir si un nonce est expiré les nonces n'existant pas en base; si jamais on avait ça il faudrait déterminer une URL de retour dépendante du service plutôt qu'une URL unique et directement renvoyer vers le service (et différencier le service du service BO encore plus chiant) en question plutôt que l'URL de retour par défaut qui est le portail usager.
Une possibilité plus simple ce serait de laisser la personne se connecter mais de déterminer l'URL de retour basée sur son OU, pour rediriger les agents vers le portail agent.
Mis à jour par Frédéric Péters il y a environ 4 ans
si un nonce est expiré les nonces n'existant pas en base
En l'espèce, ils sont bien en base.
messages.warning(request, _('request has expired')) → login_dump, consent_obtained, nid_format = get_and_delete_key_values(nonce) → kv = KeyValue.objects.get(key=key)
Mis à jour par Benjamin Dauvergne il y a environ 4 ans
Frédéric Péters a écrit :
si un nonce est expiré les nonces n'existant pas en base
En l'espèce, ils sont bien en base.
[...]
Oui mais non c'est spécifique.
Mis à jour par Frédéric Péters il y a environ 4 ans
Ok mais ça a du sens alors de ramener/limiter le ticket à la situation commune SAML, où :
- on sait que les nonces sont en base
- on peut faire un SSO initié par l'IdP vers ce qui sera trouvé en query string (service=portal-agent)
?
Mis à jour par Benjamin Dauvergne il y a plus de 2 ans
1ère chose, on pourrait juste virer le warning, ça supprimera la page intermédiaire au SSO vers le portail usager qui suit forcément cette erreur.
2ème chose, il faudrait propager le paramètre service
de /login/
vers la destination, ici /idp/saml2/continue
chose qui ne me semble pas faite actuellement, à partir de là on pourra donc utiliser ce slug pour trouver le LibertyProvider concerné et ainsi déclencher un SSO initié par l'IdP (via authentic2.idp.saml2.saml2_endpoints.idp_sso).