2013-03-21 94 views
9

親愛的人精:omniauth谷歌-的oauth2用色器件 - invalid_credentials和 「CSRF檢測」 的SO

我開發on Rails的3.2.12一個Ruby應用程序(和我還是新手的話)。

我想讓Devise與Omniauth合作......我嘗試的第一個策略是Google_oauth2。

我選擇我要在Google中使用的憑據後,Google已將其重定向回本地主機:3000實例。

在這種重定向返回到本地主機,我看到了閃光的通知:

Could not authenticate you from GoogleOauth2 because "Csrf detected".

服務器日誌中包含的:

Started GET "https://stackoverflow.com/users/auth/google_oauth2" for 127.0.0.1 at 2013-03-21 08:57:01 -0400 
(google_oauth2) Callback phase initiated. 
(google_oauth2) Callback phase initiated. 
(google_oauth2) Authentication failure! invalid_credentials: OmniAuth::Strategie 
s::OAuth2::CallbackError, OmniAuth::Strategies::OAuth2::CallbackError 


Started GET "https://stackoverflow.com/users/auth/google_oauth2/callback?state=7849a3762d07e7f89e69b4aa46 
7efc7b7b2c21655193396b&code=4/v-dSBwAvQUUZL87iNV_yk_Z8s_x0.cnqsdbDX4gUYaDn_6y0ZQ 
NgQ9hAaewI" for 127.0.0.1 at 2013-03-21 08:57:40 -0400 
Processing by OmniauthCallbacksController#failure as HTML 
    Parameters: {"state"=>"7849a3762d07e7f89e69b4aa467efc7b7b2c21655193396b", "cod 
e"=>"4/v-dSBwAvQUUZL87iNV_yk_Z8s_x0.cnqsdbDX4gUYaDn_6y0ZQNgQ9hAaewI"} 
Redirected to http://localhost:3000/users/sign_in 
Completed 302 Found in 0ms (ActiveRecord: 0.0ms) 

我注意到,我得到完全相同的結果,如果我只需將回調URL直接放入瀏覽器中,而不需要提供任何參數。

http://localhost:3000/users/auth/google_oauth2/callback 

我該怎麼辦?我可以提供哪些其他信息?

+0

GitLab中的相同錯誤的解決方案? http://stackoverflow.com/questions/42290769/gitlab-could-not-authenticate-you-from-googleoauth2-because-csrf-detected-erro – 2017-02-17 06:25:26

回答

11

回答我自己的帖子....我已經過去了。我不完全確定爲什麼,但我有一些值得傳遞的線索。

還有一些與omniauth-facebook策略相關的其他類似問題。他們似乎不適用於谷歌,所以我沒有看太深。然後我嘗試配置FB策略,並得到同樣的問題。 FB解決方案是將omniauth-facebook gem恢復到1.4.0。

gem 'omniauth-facebook', '1.4.0' 

這也自動恢復了omniauth-oauth2寶石(我還沒有把寶石包裹在寶石的東西周圍)。當我再次嘗試谷歌鏈接,它沒有扔相同Csrf檢測到的消息...嗯...恢復FB寶石固定谷歌----需要一個免責聲明在這裏,其他事情可能是這裏的問題,但我我認爲它是正確的。

還有一個值得一提的問題。我上面提供的日誌顯示2個重複的日誌消息....

(google_oauth2) Callback phase initiated. 
(google_oauth2) Callback phase initiated. 

這揭示了另一個(也許是相關的)問題。這意味着回調被執行兩次。一旦我通過了CSRF問題,我開始自行獲取invalid_credentials問題。錯誤的原因是重複的回調呼叫。顯然,Oauth2只允許單次使用憑證。第二次使用是無效的。

我railscast#235作爲我的嚮導: http://railscasts.com/episodes/235-devise-and-omniauth-revised?autoplay=true

這讓我加上 「供應商」,在omniauth.rb初始化調用。和config.omniauth在devise.rb初始化程序中調用。我想這些以某種方式導致重複回調?!?!?

從omniauth.rb中刪除條目讓我過去了那個。

所以你有它。我的第二個問題,我的第二個問題,我是唯一的答覆者。不知道是否因爲他們愚蠢或者很難...我希望後者。

+0

嗯,我的朋友你可以更安心,沒有人回答因爲這個問題真的很難! 我現在也遇到了與Google,Linkedin和Twitter相同的問題:(所以,你說我必須從omniauth.rb中刪除一行,對嗎?我有點搞砸了,我沒有有這個文件,那麼怎麼辦? – jlstr 2013-04-27 15:23:51

+0

我的omniauth.rb文件位於一個不知名的地方... config/initializers/omniauth.rb。如果你沒有它,我只能看看其他可能的重複? – Doug 2013-05-02 00:28:57

+3

刪除omn​​iauth.rb的工作原理與RailsCast一樣,但是當遵循Devise wiki上的指南(https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview)時,只能配置OmniAuth在config/initializers/devise.rb中加上'config.omniauth:facebook,「APP_ID」,「APP_SECRET」,:strategy_class => OmniAuth :: Strategies :: Facebook'。 – 2014-01-24 06:14:51

4

剛剛偶然發現了這個問題,但您的修復程序對我無效。我正在使用以下寶石版本;

oauth2 (0.8.1) 
omniauth (1.1.4) 
omniauth-oauth2 (1.1.1) 
omniauth-facebook (1.4.1) 
omniauth-google-oauth2 (0.2.1) 

什麼解決我的問題是調整我omniauth.rb初始化器以下;

OmniAuth.config.full_host = "http://localhost:3000" 

Rails.application.config.middleware.use OmniAuth::Builder do 
    provider :facebook, KEY, SECRET, 
    provider :google_oauth2, KEY, SECRET, :scope => "userinfo.email,userinfo.profile" 
end 

的關鍵部分是增加對google_oauth2的「範圍」參數,否則我得到的身份驗證失敗。

我根據我的這個博客的安裝:http://sreeharikmarar.blogspot.com.au/2013/01/omniauth-devise-authentication-using.html

相關的職位:OmniAuth using google oauth 2 strategy scope failure

4

我有同樣的問題。在我的情況下,我已經在devise.rb和omniauth.rb中初始化了google-oauth憑證;因爲這個回調發生了兩次。從devise.rb中刪除google-oauth憑證後,此CSRF令牌問題得到解決。

+0

working對我也是如此。刪除了devise.rb中的條目 – 2014-12-17 05:34:18