web-dev-qa-db-ja.com

OmniauthとGoogleで「CSRFが検出されました」

私はこれを手に入れています

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

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

16
Joseph Le Brech

同じ問題が発生しました

(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

10
gdurelle

この問題は、/config/initializer/session_store.rbで定義されたドメインがGoogleAPIコンソールで定義されたOrigin/redirect_uriと異なる場合にRailsで発生します。

MyApp::Application.config.session_store :cookie_store, key: '_app_session', domain: 'my_app.com'

ドメインパラメータを削除するか、両側で同じドメインを使用すると、問題が修正されました。

9
Vincent Pochet

OmniAuthでDeviseを使用している場合は、余分なomniauth.rb初期化ファイルをスキップし、initializers /devise.rb内にconfig.provider "KEY"、 "SECRET"を追加して、実装を続行する必要があります。

8
rahul patil