皆さん、こんにちは!
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 にポーリングするのを防ぐために何か変更を加えたのでしょうか?
simon
2
はい、nonce は、生成されたユーザーのセッションに紐付けられるようになりました。あなたが直面している問題は、おそらくこれに関連しているようです。
curl リクエストを送信する代わりに、認証対象のユーザーがサイトの「ログイン」ボタンをクリックするか、アプリケーションから /session/sso へリダイレクトされることで、/session/sso を訪問することが期待されています。ユーザーがそうすると、Discourse によってあなたのアプリケーションへリダイレクトされます。そのペイロードに含まれる nonce は有効になります。
その問題を解決するために、私にはそれしか方法がありませんでした。しかし、それでは非同期のログイン処理が壊れてしまいます。
そのやり方は本当に気に入っていたのですが。
Axios を通じて行うことも試みました。リクエストがクライアントから来ているので、動くはずだと思っていたのですが、それもうまくいかないようです。
もし非同期のログイン処理を実装する方法をご存知であれば、どんなアドバイスでも大歓迎です!いずれにせよ、ご返信いただきありがとうございます。とても助かりました。