Explication du problème
- l'application crée une session et stocke l'information avant de rediriger vers CAS
- l'application redirige vers CAS qui demande le mot de passe
- CAS redirige vers l'application
- l'utilisateur clique sur le bouton "back"
- le login CAS se fait sans intervention utilisateur, la page affiche à nouveau l'application. Dans certains cas l'application refuse le ticket qu'il n'attend pas[*]. Et même si cela ne fait pas d'erreur, le "back" n'a rien fait et l'utilisateur se demande bien pourquoi.
Solution
- sur la mire CAS (formulaire demandant le login & mot de passe), ajouter au
<form>
:
onsubmit="ignore_on_history_back()"
et dans la page :
function ignore_on_history_back() { // on back, do not autolog nor prompt, go back to the app try { window.history.replaceState({}, null, location.href.replace('/cas/login', '/cas/authentification-en-cours.html')) } catch (e) {} }
créer une page statique
authentification-en-cours.html
<script> var isForward = (history.state || {}).isForward; try { history.replaceState({ isForward: !isForward }, null, null); } catch (e) {} history.go(isForward ? 1 : -1); </script> Page temporaire d'authentification. Nous vous redirigeons vers la page précédente...
(cf https://cas.univ-paris1.fr/cas/authentification-en-cours.html)
[*] we have this issue with shibboleth-idp that is configured to delegate to CAS