Google Auth のリダイレクト URI が一致しません

このトピックの最後の部分にある問題と似た問題に直面しています: Configure Google login for Discourse - #205

私の場合、Google からのエラーメッセージは、リクエスト内の URI がサイトの http 版であると指摘していますが、サイトは https への強制設定をしているため、Google で設定したアドレスは https です。私の Discourse サイトは Apache サーバーの裏でプロキシされており、Apache は http URL を https にリダイレクトするように設定されています。また、Discourse の設定で force_https もオンになっています。

Google のエラーは、force_https がオンになっているにもかかわらず、Discourse がリダイレクト用に https ではなく http アドレスを送信していることを示していると考えてよいでしょうか?これを修正するための別の設定はありますか?

Google のクライアント設定に http URL を追加してみましたが、それにより Google アカウントの選択と承認に進むことができました。しかし、サイトに戻った際に「申し訳ありませんが、アカウントの承認中にエラーが発生しました。承認を承認しなかった可能性があります」というメッセージが表示されました。エラーログには次のエラーが記録されていました: “(google_oauth2) 認証失敗! csrf_detected: OmniAuth::Strategies::OAuth2::CallbackError, csrf_detected | CSRF detected”。つまり、Google 認証が、http アドレスから http アドレスへのリダイレクトを偽装攻撃として検出しているようです。

GitHub 認証のログでも同様のエラー (redirect_uri_mismatch) が確認されており、おそらくリダイレクト API に対しても http アドレスを送信しているようです。

ご助言をお願いします。

解決しました! :joy: :man_dancing:

もし他の誰かにも同じ問題が発生した場合、このサイトで解決策が見つかりました:[HELP] Cannot login, error shows "BAD CSRF" - #25 by daxen

私はこれを追加しました:

RequestHeader set X-Forwarded-Proto "https"

SSL サイトの vhost 設定に追加して、X-Forwarded-Proto ヘッダーが Discourse に渡されるようにしました。