SSO перестал работать 🤔

Привет, ребята!

Я обрабатываю аутентификацию SSO в своем PHP-бэкенде. Сначала отправляю запрос curl на URL SSO (Communauté et formation pour entrepreneurs), чтобы получить полезную нагрузку SSO и сигнатуру (SIG), а затем создаю свою собственную полезную нагрузку для формирования правильного URL перенаправления.

И вот тут начинается странное…

Если я открываю Communauté et formation pour entrepreneurs в браузере, копирую SSO и SIG и вставляю их в свой скрипт, итоговый URL перенаправления работает.

Если же я получаю их через CURL, то при перенаправлении появляется сообщение об ошибке, и в логе я вижу следующее:

Verbose SSO log: Nonce has already expired

Я в тупике… Проблема появилась внезапно, и теперь мои пользователи не могут войти в систему.

Может быть, Discourse что-то изменил, чтобы предотвратить пинг /session/sso со стороны ботов?

Да, теперь nonce привязан к сессии пользователя, для которого он был сгенерирован. Похоже, ваша проблема связана с этим:

Вместо отправки curl-запроса ожидается, что пользователь, который должен быть аутентифицирован, перейдет на /session/sso — либо нажав кнопку «Войти» на сайте, либо будучи перенаправленным на /session/sso из вашего приложения. После этого Discourse перенаправит его обратно в ваше приложение. nonce, содержащийся в этой полезной нагрузке, будет действителен.

Мне пришлось сделать именно это, чтобы исправить проблему, но из-за этого ломается мой асинхронный процесс входа. :frowning: Мне очень нравилось делать это именно так.

Я также пробовал реализовать это через Axios. Я ожидал, что это сработает, поскольку запрос исходит от клиента. Похоже, это тоже не работает.

Если у вас есть идеи, как можно реализовать асинхронный процесс входа, буду рад любым советам! В любом случае, спасибо за ответ, очень ценю.