【问题标题】:Merging local account with social auth将本地帐户与社交身份验证合并
【发布时间】:2015-12-02 22:24:40
【问题描述】:

我的网站提供本地身份验证(电子邮件 + 密码)和社交身份验证(facebook、google 等)。

有 2 个用户:Alice(恶意)和 Bob(好)。

Alice 使用本地身份验证创建一个帐户。她使用 Bob 的电子邮件。她的帐户在 DB 中如下所示:

email: 'bob@bob.com'
password: 'hunter2'
isEmailVerified: false

现在,Bob 加入了我的网站。他通过 google 的 oauth 2 加入。由于他的电子邮件已经存在于数据库中,我们对其进行验证,并且他的 google 信息已附加到该帐户:

email: bob@bob.com
password: 'hunter2'
isEmailVerified: true
googleAuth: {
  name: 'Bob smith'
}

现在,Alice 可以访问 Bob 的帐户了,哦哦!

显然这是错误的。但是,在创建帐户之前不需要验证电子邮件,有什么更好的方法呢?是否可以?我确信这已经在野外解决了,但我无法弄清楚如何在不影响用户体验的情况下做到这一点。

我想出的选项,但它们似乎是错误的:

  • 如果电子邮件未通过验证,请删除 Alice 的帐户并为 Bob 创建一个新的单独帐户
  • 禁止 Bob 加入,因为他的电子邮件已在使用中
  • 从帐户中删除密码,使 Alice 无法登录
  • 在验证电子邮件之前不要创建帐户(对用户不友好)

【问题讨论】:

  • 那么,如果您没有检查其真实性,您如何相信某些信息(电子邮件)?如果没有证明它是有效的,那么使用称为“电子邮件”的标识符有什么意义?
  • 没错,但我访问的绝大多数网站都允许我创建帐户而无需先验证我的电子邮件。我很好奇,他们是怎么处理的?
  • 如何告诉用户有一个用户在使用该电子邮件帐户,然后向他显示正在使用他的电子邮件的帐户的用户名,并选择“不是你?”如果他点击它让他能够验证他的电子邮件,如果他确实验证了电子邮件然后删除 mailicious 帐户。
  • @ivan 我喜欢这个,但我没有用户名字段,所以我必须向 Bob 提供 Alice 的另一条个人信息。不确定这是否可以...
  • 我真的不认为那没问题,所以与其提供用户名,不如再向他展示一次电子邮件帐户以确保如果他声称那是他的电子邮件帐户,那么让他尝试验证如果他确实验证了它,让他更改帐户的密码

标签: javascript authentication oauth-2.0


【解决方案1】:

在将帐户标记为已验证之前,请让用户输入他的密码。由于 Bob 不知道 Alice 的密码,他必须重置他的密码。

【讨论】:

  • 这可行,但要求 Bob 输入他的密码两次(一次在 google oauth 中,然后再次回到我的网站上)。然后,如果他不知道密码,则该帐户实际上会被删除,因为我们不想转移任何可能来自 Alice 的信息,对吧?
  • 请记住,如果 Alice 确实使用 Bob 的电子邮件来表明自己的身份,那么 Bob 的身份就会被盗,那么您应用中的额外密码将是一种安全增强
猜你喜欢
  • 1970-01-01
  • 2016-11-28
  • 1970-01-01
  • 2023-01-30
  • 2018-12-13
  • 1970-01-01
  • 1970-01-01
  • 2015-08-05
  • 1970-01-01
相关资源
最近更新 更多