2012-02-09 94 views
4

我正在使用'omniauth-openid'gem來實現OpenID登錄。在我OmniAuth回調方法,我做這樣的事情(它的簡化,但傳達了重要的信息):如何使用omniauth-openid gem secure使OpenID登錄?

def google 
    oauth = request.env['omniauth.auth'] 
    if @user = User.find_by_email(oauth.info.email) 
    sign_in(@user) and redirect_to '/dashboard' 
    end 
end 

這實際上是一樣的東西在GitHub上OmniAuth文檔顯示你做的;但我覺得這是非常不安全的。攻擊者需要做的就是手動更改回調URL中的info.email參數,並且可以像其他任何用戶一樣登錄。

這是OmniAuth的根本缺陷嗎?或者有什麼方法可以確認傳遞給OmniAuth回調方法的參數是由OpenID提供商真正發送的,而不是由壞人修改的?

+0

我不知道一個事實,但我很確定OmniAuth在幕後做了很多工作。我認爲你的問題更多的是關於OpenID協議是否安全。 – Andrew 2012-10-24 22:35:16

回答

-1

我認爲這就是「protect_from_forgery」的用途。 http://ruby.about.com/od/mr/g/protectforgery.htm

+0

'protect_from_forgery'可以防止人僞造會話ID,但我正在討論僞造「info.email」參數。此外,通常您必須關閉您的OpenID回調URL的'protect_from_forgery',因爲Google等在使用OpenID進行身份驗證時不會傳遞Rails會話令牌。 – 2012-03-29 06:27:27