SSOが機能しなくなりました🤔

皆さん、こんにちは!

PHP バックエンドで SSO 認証を処理しています。まずは cURL リクエストを SSO URL (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 を通じて行うことも試みました。リクエストがクライアントから来ているので、動くはずだと思っていたのですが、それもうまくいかないようです。

もし非同期のログイン処理を実装する方法をご存知であれば、どんなアドバイスでも大歓迎です!いずれにせよ、ご返信いただきありがとうございます。とても助かりました。