【问题标题】:Handling account name collisions between multiple 3rd party oauth providers处理多个 3rd 方 oauth 提供商之间的帐户名称冲突
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2018-07-20
    • 2019-02-27
    • 2011-04-07
    • 2015-10-05
    • 2013-12-11
    • 2011-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多