1

认证流程设计

在创建允许用户通过多种方式(facebook、twitter、本地帐户)注册和登录的服务时,通过多种方式处理帐户创建和验证的最佳方式是什么?

换句话说

想象一下这种情况:

  • 用户通过发送他(或可能任何人)的电子邮件密码(被散列等)创建一个普通帐户
  • 方便起见,用户可以立即访问他们新创建的帐户(无需验证他们的电子邮件地址
  • 然后,用户尝试使用外部 oAuth 服务登录:Twitter、Facebook 等
  • 使用 facebook 登录时,发现已经(手动)使用相同的电子邮件地址创建了一个帐户

处理这个问题的最佳方法是什么?

我正在尝试提出一个既用户友好(方便)又安全的解决方案,可能的安全漏洞让我感到害怕。

例子

网络服务“Mixlr”为例,让我们看看他们是如何处理这个问题的:

  • 我用的电子邮件地址创建了一个帐户(对您来说很糟糕)
  • Mixlr 立即让我登录并让我开始使用他们的服务(这很方便)
  • 他们还会向我发送一封电子邮件以验证我的帐户(即使我已经在使用它)
  • 决定要加入 Mixlr,因此您创建了一个帐户....但您选择使用Facebook来创建您的 Mixlr 帐户,而不是使用经典的注册过程
  • 有趣的是,Facebook会发回用来创建的帐户的相同电子邮件地址
  • Mixlr 决定“合并”这些帐户,只需将您的Facebook帐户添加为他们的服务中的新“连接帐户”

问题就在于此

如果我仍然登录,使用该服务,从技术上讲,我对您的 Facebook帐户有一些小的控制权....

这不是不安全……坦率地说,有点粗略吗?

然而,Mixlr 不允许用户在没有验证/确认其电子邮件地址的情况下“第二次”登录。

从本质上讲,我不知道为了方便和安全,中间立场是什么,而不首先要求用户在注册期间验证他们的电子邮件地址。

4

2 回答 2

1

这将是我对如何处理这个问题的建议:

案例 1:用户在您的网站上创建帐户

  • 由于您的要求是用户无需验证其电子邮件地址即可直接访问该站点,因此您至少应该暂时进行此操作。如果他没有及时激活账号,你应该删除或者停用账号。
  • 提供用于连接其他帐户(Facebook、Twitter 等)的按钮,与他们提供的电子邮件地址无关

案例 2:用户点击Login with ...

  • 从提供商处获取用户的电子邮件地址
    • 如果您的服务器上已经有该电子邮件的帐户,请向用户显示一个屏幕,他可以在其中登录该帐户,如果成功连接两个帐户
    • 如果他还不知道就让他
      • 创建本地帐户
      • 登录并使用不同的电子邮件地址连接本地帐户
      • 或者只是将他作为没有本地帐户的特殊用户登录(取决于您是否要支持此用例)

你当然不应该将未经验证的内容与经过验证的内容相匹配,因此 Mixlr 在这里做了一些非常糟糕的事情。在您连接它们之前,用户应该始终必须批准这两个帐户(即同时登录两个帐户)。

请注意,对于某些提供商,您也无法确定向他们报告的电子邮件地址是否经过验证。

于 2012-10-04T17:07:44.463 回答
1

我只想说不要将未经验证的帐户与通过 facebook 或其他方式创建的帐户合并,并且通过第三方服务创建的帐户将优先,因为他们必须使用该帐户进行身份验证。

于 2012-10-06T16:13:14.540 回答