Nous utilisons DiscourseSSO et, sporadiquement, les utilisateurs rencontrent des problèmes de connexion (similaires à Sporadic issue wp-discourse/SSO: Nonce has already expired). J’essayais de déboguer cela en ajoutant des journaux supplémentaires et, par chance, j’ai rencontré le problème après quelques jours. Pour être clair, la connexion fonctionne la plupart du temps, c’est juste que sporadiquement (peut-être pendant 5 minutes par jour) les utilisateurs rencontrent des problèmes de connexion.
Nous utilisons une configuration de sous-dossier sur un cluster multi-nœuds, en utilisant une base de données partagée externe et Redis si cela a une importance. Il y a deux scénarios d’échec :
-
Le nonce a expiré
Lorsque l’utilisateur est redirigé vers /session/sso_login, SessionController ne reçoit pas l’id de session dans la session et ne peut donc pas rechercher le nonce. J’ai essayé de journaliser la session (Rails.logger.warn(\"Verbose SSO log: Session #{session.keys.map {|key| [key, session[key]].join('=')}.join(',')}\")) et cela a affiché une session vide. J’ai vérifié que le navigateur envoie le cookie “_forum_session” tel que reçu dans la requête précédente et que le cookie est journalisé sur le serveur si la journalisation est activée dans SessionController (Rails.logger.warn(\"Verbose SSO log: Cookies #{cookies.map {|cookie| cookie.join('=')}.join(',')}\")). -
La connexion se termine mais l’utilisateur reçoit une erreur de connexion à l’écran
Lorsque l’utilisateur est redirigé vers /session/sso_login, SessionController est capable de vérifier les données SSO et de connecter l’utilisateur (je voisVerbose SSO log: User was logged on user5dans les journaux). Mais lorsqu’il redirige l’utilisateur vers /forums/latest, l’utilisateur voit une erreur à l’écran. J’ai remarqué que dans le flux de travail fonctionnel, cette action efface/renvoie un cookie vide “cn”, mais dans le scénario d’échec, elle met simplement à jour et renvoie le cookie “_t”. Je suppose que ce scénario est également lié à des données de session manquantes.
Si nous attendons environ 5 minutes et réessayons, tout recommence à fonctionner correctement.
Je n’ai pas testé si tous les utilisateurs qui accèdent au site à ce moment-là rencontrent le problème ou non, mais on m’a dit anecdotiquement que plusieurs utilisateurs l’ont rencontré une fois sur notre instance.