处理多个第三方oauth提供程序之间的帐户名冲突

时间:2015-04-14 00:31:01

标签: asp.net-mvc oauth owin

我正在使用OWIN和MVC 5来处理多个第三方身份提供商,包括Facebook,LinkedIn和Google帐户。

我的ApplicationUser目前正在继承默认的IdentityUser,它似乎在电子邮件字段中添加了唯一性约束。

如果我使用Facebook登录我的网站,我的用户名设置为" john@hotmail.com"。然后,如果我回到网站并尝试使用谷歌授权,毫不奇怪我得到以下两个错误:

Name john@hotmail.com is already taken.
Email 'john@hotmail.com' is already taken.

理想情况下,我会将这两个身份合并到一个帐户中,该帐户启用了两种类型的oauth方法。

我对微软身份模型不太熟悉 - 是否存在实现目标的阻力最小的路径?

我所关注的一个问题是处理攻击者使用" john@hotmail.com"注册一个linkedin帐户的情况; (如果我没有)并使用该方法尝试授权我的网站。在这种情况下,每次用户尝试在合并之前添加新的auth方法时,我都需要发送验证电子邮件。

编辑:

进行更多挖掘我发现我的用户配置已定义了这些选项

manager.UserValidator = new UserValidator<ApplicationUser>(manager)
            {
                AllowOnlyAlphanumericUserNames = false,
                RequireUniqueEmail = true
            };

想知道这是否合适。如果最终用户将不同的电子邮件地址应用于他们的Facebook与LinkedIn个人资料,则可能会造成更大的混乱。

1 个答案:

答案 0 :(得分:2)

UserManager公开了AddLoginAsync方法,目的是向现有用户添加另一种登录方法。在我的身份验证服务器中,只要电子邮件地址相同,我就允许用户通过任何方法登录。

关于创建虚假帐户,提供OAuth2授权服务的任何人都应该在允许使用这些服务之前验证电子邮件。谷歌和Facebook做;我假设LinkedIn做得好,但不确定。提供商还可能会公开email_verified声明或类似声明,您可以检查是否安全。