「Authentication failure! csrf_detected: OmniAuth::Strategies::OAuth2::CallbackError」エラーの原因は session["omniauth.state"] の欠如

こんにちは、
本番環境で Discourse フォーラムをデプロイしようとしています。独自の OAuth プロバイダーを使用しているため、それを有効にするために discourse-oauth2-basic プラグインを使用しています。

カスタム OAuth プロバイダーでログインする際に、以下のエラーが表示されます。

“Authentication failure! csrf_detected: OmniAuth::Strategies::OAuth2::CallbackError, csrf_detected | CSRF detected”

いくつかのデバッグを行った結果、リダイレクト後にセッションから “omniauth.state” が欠落しており、/auth/oauth2_callback での state フィールドの検証ができないことが判明しました。ご助力いただければ幸いです。

注:開発モードではセットアップ全体が正常に動作しています。

よろしくお願いいたします。

認証は同じブラウザ内で開始され、終了していますか?デフォルトの same site cookies 設定値を変更しましたか?

「いいね!」 2

はい、@david 認証は同じブラウザ内で開始され、終了しています。same_site_cookies の値は変更していません。デフォルトで “Lax” に設定されています。

標準のインストールガイドに従っていますか?

残念ながら、サイトの状況が見えない状態では、お手伝いすることが非常に困難です。リンクを共有していただくことは可能でしょうか?

「いいね!」 2

こんにちは、@david さん。Discourse を Docker コンテナでホストしています。使用している Docker ファイルは discourse_docker/image/base at master · discourse/discourse_docker · GitHub です。Docker コンテナ内で Discourse を起動するスクリプトが存在しないため、Discourse を事前コンパイルして起動する小さな起動スクリプトを追加しました。
RAILS_ENV=production bundle exec rake db:migrate
RAILS_ENV=production bundle exec rake assets:precompile
RAILS_ENV=production bundle exec rails server --binding=0.0.0.0

残念ながら、カスタムインストールに関するコミュニティサポートを提供するのは非常に困難です。公式ガイド を参照して、Discourse のセットアップを試みてください。それを行えない場合は、Marketplace の誰かが有料で支援してくれるかもしれません。

「いいね!」 2