认证流程设计
在创建允许用户通过多种方式(facebook、twitter、本地帐户)注册和登录的服务时,通过多种方式处理帐户创建和验证的最佳方式是什么?
换句话说
想象一下这种情况:
- 用户通过发送他(或可能任何人)的电子邮件和密码(被散列等)创建一个普通帐户
- 为方便起见,用户可以立即访问他们新创建的帐户(无需验证他们的电子邮件地址)
- 然后,用户尝试使用外部 oAuth 服务登录:Twitter、Facebook 等
- 使用 facebook 登录时,发现已经(手动)使用相同的电子邮件地址创建了一个帐户
处理这个问题的最佳方法是什么?
我正在尝试提出一个既用户友好(方便)又安全的解决方案,可能的安全漏洞让我感到害怕。
例子
以网络服务“Mixlr”为例,让我们看看他们是如何处理这个问题的:
- 我用您的电子邮件地址创建了一个帐户(对您来说很糟糕)
- Mixlr 立即让我登录并让我开始使用他们的服务(这很方便)
- 他们还会向我发送一封电子邮件以验证我的帐户(即使我已经在使用它)
- 您决定要加入 Mixlr,因此您创建了一个帐户....但您选择使用Facebook来创建您的 Mixlr 帐户,而不是使用经典的注册过程
- 有趣的是,Facebook会发回我用来创建我的帐户的相同电子邮件地址
- Mixlr 决定“合并”这些帐户,只需将您的Facebook帐户添加为他们的服务中的新“连接帐户”
问题就在于此
如果我仍然登录,使用该服务,从技术上讲,我对您的 Facebook帐户有一些小的控制权....
这不是不安全……坦率地说,有点粗略吗?
然而,Mixlr 不允许用户在没有验证/确认其电子邮件地址的情况下“第二次”登录。
从本质上讲,我不知道为了方便和安全,中间立场是什么,而不首先要求用户在注册期间验证他们的电子邮件地址。