【发布时间】:2013-11-20 23:28:01
【问题描述】:
我有一个简单的使用电子邮件和密码登录的传统设计用户身份验证系统。我想用 Facebook 添加登录。我大部分时间都在工作,但我很好奇处理边缘情况的安全隐患。
假设这里发生了这样的事情:
- 用户目前未经身份验证,但已有一个电子邮件为“foo@bar.com”的帐户
- 用户点击“用 Facebook 登录”,授权从 Facebook 访问
- Facebook 回调到我的服务器,显示电子邮件为“foo@bar.com”
此时我们有一个没有附加 Facebook 凭据的用户帐户,我们有一个没有附加用户的 Facebook 凭据,但他们都有相同的电子邮件。
所以此时有两种选择:
- 向用户抱怨该电子邮件地址已被其他用户使用,并且要将 Facebook 添加到他们的帐户,他们必须首先登录(使用他们的密码)并关联 Facebook 帐户。
- 或者只需将他们登录到具有相同电子邮件的帐户,然后将 facebook 凭据附加到他们的帐户。
首选选项 2,因为它对用户来说更容易,但这意味着通过 Facebook 访问以前从未链接过 Facebook 的帐户。如果服务器从 Facebook 获取的电子邮件地址可以被欺骗或以任何方式更改,这将是一个巨大的安全问题。
但我的服务器相信用户对电子邮件是安全的,Facebook 也是如此。但是我可以相信他们之间的交流吗?
【问题讨论】:
-
我不确定您是否注意到,但我链接到的问题大约在 2 周前更新。显然,Facebook 已经修复了它的错误,因此您只有在已经确认的情况下才会收到用户的电子邮件。由于现在您可以信任该电子邮件,因此我将相应地编辑我的答案。
标签: facebook security devise omniauth