Мы используем DiscourseSSO, и время от времени пользователи сталкиваются с проблемами входа (похожими на описанные здесь: Sporadic issue wp-discourse/SSO: Nonce has already expired). Я пытался отладить это, добавив дополнительное логирование, и, к счастью, смог воспроизвести проблему через несколько дней. Чтобы прояснить: вход работает в большинстве случаев, но эпизодически (возможно, в течение 5 минут в день) пользователи сталкиваются с ошибками входа.
У нас настроена структура с подпапками в кластере из нескольких узлов, используется внешняя общая база данных и Redis, если это имеет значение. Есть два сценария сбоя:
-
Истёк срок действия nonce
Когда пользователя перенаправляют на /session/sso_login, контроллер SessionController не получает session_id в сессии и, следовательно, не может найти nonce. Я добавил логирование сессии (Rails.logger.warn("Verbose SSO log: Session #{session.keys.map {|key| [key, session[key]].join('=')}.join(',')}")), и оно вывело пустую сессию. Я проверил, что браузер отправляет cookie-файл “_forum_session”, полученный в предыдущем запросе, и этот cookie регистрируется на сервере при логировании в SessionController (Rails.logger.warn("Verbose SSO log: Cookies #{cookies.map {|cookie| cookie.join('=')}.join(',')}")). -
Вход завершается, но на экране появляется ошибка входа
Когда пользователя перенаправляют на /session/sso_login, контроллер SessionController успешно проверяет данные SSO и выполняет вход пользователя (в логах я вижуVerbose SSO log: User was logged on user5). Однако при перенаправлении пользователя на /forums/latest на экране появляется ошибка. Я заметил, что в рабочем сценарии это действие очищает/возвращает пустым cookie “cn”, а в сценарии сбоев оно просто обновляет и возвращает cookie “_t”. Моё предположение: этот сценарий также может быть связан с отсутствием данных сессии.
Если подождать около 5 минут и попробовать снова, всё начинает работать нормально.
Я не проверял, сталкиваются ли с этой проблемой все пользователи, обращающиеся к сайту в этот момент, но мне устно сообщили, что на нашем экземпляре с ней столкнулись несколько пользователей.