1. ホーム
  2. ruby

[解決済み] OmniauthとGoogleで "CSRFが検出された "件

2022-03-11 05:49:30

質問

次のような現象が起きています。

OmniAuth::Strategies::OAuth2::CallbackError at /auth/google/callback csrf_detected|CSRF を検出しました。

私のコード

require 'sinatra'
require "sinatra/json"
require "sinatra/config_file"
require 'omniauth-oauth2'
require 'omniauth-google-oauth2'

use Rack::Logger

config_file "config/app_config.yml"
use Rack::Session::Cookie, secret: '5fb7w345y3489f523y4h'

configure do
  enable :sessions
end

use OmniAuth::Builder do
  provider :google_oauth2, settings.google[:client_id], settings.google[:secret],
    {
      :scope => "userinfo.profile",
      :access_type => "offline",
      :prompt => "select_account consent",
      :name => "google"
    }
end

get '/list' do
  json get_list
end

get '/' do
  %Q|<a href='/auth/google'>Sign in with Google</a>|
end

get '/auth/:name/callback' do
  @auth = request.env['omniauth.auth']
  @auth.inspect
end

私のコールバックはコードとステートの両方を返しています。

どうすればいいですか?

同じ問題が発生した

<ブロッククオート

(google_oauth2) コールバックフェーズが開始されました。
(google_oauth2) 認証に失敗しました! csrf_detected: OmniAuth::Strategies::OAuth2::CallbackError, csrf_detected | CSRF 検出

前回の Omniauth-oauth2 のアップデートで "state" パラメータに必須フィールドが追加されました。

provider_ignores_state: true を使うことを提案する人もいますが、これは csrf の欠陥を引き起こすので、良くないアイデアです。

google_oauth2が動作するようにするには、以前のバージョンにダウングレードする必要がありそうです。

で発行してください。 https://github.com/intridea/omniauth-oauth2/issues/58