Usamos DiscourseSSO y, esporádicamente, los usuarios tienen problemas para iniciar sesión (similar a Sporadic issue wp-discourse/SSO: Nonce has already expired). Estuve intentando depurar esto agregando algunos registros adicionales y, afortunadamente, me encontré con el problema después de un par de días. Para ser claros, el inicio de sesión funciona la mayoría de las veces, solo que esporádicamente (tal vez durante 5 minutos al día) los usuarios tienen problemas para iniciar sesión.
Usamos una configuración de subcarpeta en un clúster multinodo, utilizando una base de datos compartida externa y Redis si eso marca alguna diferencia. Hay dos escenarios de fallo:
-
Nonce expirado
Cuando el usuario es redirigido a /session/sso_login, SessionController no recibe session_id en la sesión y, por lo tanto, no puede buscar el nonce. Intenté registrar la sesión (Rails.logger.warn(\"Verbose SSO log: Session #{session.keys.map {|key| [key, session[key]].join('=')}.join(',')}\")) y mostró una sesión vacía. Verifiqué que el navegador está enviando la cookie “_forum_session” como se recibió en la solicitud anterior y la cookie se registra en el servidor si se registra en SessionController (Rails.logger.warn(\"Verbose SSO log: Cookies #{cookies.map {|cookie| cookie.join('=')}.join(',')}\")). -
El inicio de sesión se completa pero el usuario recibe un error de inicio de sesión en la pantalla
Cuando el usuario es redirigido a /session/sso_login, SessionController puede verificar los datos SSO e iniciar sesión del usuario (veoVerbose SSO log: User was logged on user5en los registros). Pero cuando redirige al usuario a /forums/latest, el usuario ve un error en la pantalla. Noté que en el flujo de trabajo exitoso esta acción borra/devuelve una cookie “cn” vacía, pero en el escenario de fallo, simplemente actualiza y devuelve la cookie “_t”. Mi suposición es que este escenario también podría estar relacionado con la falta de datos de sesión.
Si esperamos unos 5 minutos y volvemos a intentarlo, todo vuelve a funcionar bien.
No he probado si todos los usuarios que acceden al sitio en ese momento tienen el problema o no, pero me han dicho anecdóticamente que varios usuarios lo encontraron una vez en nuestra instancia.