我知道答案会是什么,但我只是想试试运气。以Facebook
为例说,我使用omniauth-facebook
来允许用户登录我的网站。登录后,用户可以在此站点上设置一些隐私数据。
采用一种方案,我有2位用户U1
和U2
。他们都在我的网站上使用Facebook
单独登录,并分别授权该应用。现在考虑一个共享系统,U1
来到我的网站,点击Login using Facebook
,验证自己,一切都没问题。 U1
离开,但未从Facebook
注销。现在U2
来了,点击Login using Facebook
并使用U1
的凭据自动登录。我不会在任何时候存储用户的access_token
。
有什么方法可以阻止这种情况发生吗?我能想到的最好的是添加一个中间页面,介于FB和我站点的回调之间,并询问用户这是否是来自FB的目标用户。如果是这样,继续,否则带她登录页面。但这并不涉及U2
仍可以看到U1
页面的事实。
非常感谢任何输入。
修改:我定位的是Facebook
,Twitter
,LinkedIn
和Google
。所以我正在寻找一个共同的解决方案。我知道有可能对Facebook
和Twitter
进行强制身份验证,但我想实现一个通用解决方案。
答案 0 :(得分:1)
Facebook(和omniauth-facebook)提供选项auth_type
以防止这种情况:
use OmniAuth::Builder do
provider :facebook, ENV['FACEBOOK_KEY'], ENV['FACEBOOK_SECRET'],
:auth_type => 'reauthenticate'
end
使用此选项,当用户尝试使用Facebook登录您的服务时,系统会要求用户输入密码。有关详细信息,请查看gem's documentation。
最后一点说明:此选项仅适用于omniauth-facebook。其他OmniAuth提供商可能有类似的选项,但其他人可能根本没有。例如,Twitter有一个force_login
选项,当设置为true
时,将从Twitter注销用户。有时候这就是你想要的,有时却不是。从其他服务注销用户可能非常麻烦。我真的很喜欢,如果所有提供商都有这两个选项,那么我们可以选择使用哪一个(从外部服务注销用户或只是再次询问密码)但我想我们必须满足于我们的有。例如,据我所知,谷歌没有保护这种风险。