【发布时间】:2015-06-19 11:12:58
【问题描述】:
我正在使用 OWIN 和 MVC 5 来处理多个 3rd 方身份提供者,包括 Facebook、LinkedIn 和 Google 帐户。
我的 ApplicationUser 目前正在继承默认的 IdentityUser,这似乎对电子邮件字段施加了唯一性约束。
如果我使用 Facebook 登录我的网站,我的用户名将设置为“john@hotmail.com”。然后,如果我回到该站点并尝试使用 google 进行身份验证,毫无疑问我会收到以下两个错误:
Name john@hotmail.com is already taken.
Email 'john@hotmail.com' is already taken.
理想情况下,我会将这两个身份合并到一个启用了 2 种 oauth 方法的帐户中。
我对 Microsoft 标识模型不是很熟悉 - 是否有一条阻力最小的途径可以实现我的目标?
我担心的一个问题是处理攻击者使用“john@hotmail.com”(如果我没有)注册一个linkedin 帐户并使用该方法尝试对我的站点进行身份验证的情况。在这种情况下,每次用户尝试在合并之前添加新的身份验证方法时,我都需要发送验证电子邮件。
编辑:
进行更多挖掘后,我发现我的用户配置定义了这些选项
manager.UserValidator = new UserValidator<ApplicationUser>(manager)
{
AllowOnlyAlphanumericUserNames = false,
RequireUniqueEmail = true
};
想知道这是否可取。如果最终用户将不同的电子邮件地址应用于他们的 Facebook 和 LinkedIn 个人资料,那可能只会造成更大的混乱。
【问题讨论】:
-
也许在上面的例子中最简单的做法是当用户尝试使用 google 帐户登录并且电子邮件发生冲突时将用户重定向到 facebook 登录?然后使用现有的 3rd 方登录管理页面也添加 google 登录?
-
使用电子邮件作为用户名的一个好处是从 3rd 方登录创建本地登录很容易。
标签: asp.net-mvc oauth owin