2012-02-09 80 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