Oauth 2.0 试图了解Firebase身份验证每个电子邮件地址和可信提供商一个帐户

Oauth 2.0 试图了解Firebase身份验证每个电子邮件地址和可信提供商一个帐户,oauth-2.0,firebase-authentication,Oauth 2.0,Firebase Authentication,当在Firebase项目中为每个电子邮件地址启用一个帐户进行Firebase身份验证时,似乎有一些附加规则适用于身份验证过程。不同的提供者似乎分为两类,可信提供者和不可信提供者。如果用户在任何时候通过受信任的提供程序登录,则用户以前登录过的所有不受信任的提供程序都将从帐户中删除。此外,用户将永远不会被允许再次登录不受信任的提供商。提供商是否可信似乎取决于使用提供商创建的新帐户是否通过向创建新帐户的地址发送验证电子邮件来专门验证该帐户 我似乎找不到一个关于哪些提供者是可信的和不可信的全面列表。通过

当在Firebase项目中为每个电子邮件地址启用一个帐户进行Firebase身份验证时,似乎有一些附加规则适用于身份验证过程。不同的提供者似乎分为两类,可信提供者和不可信提供者。如果用户在任何时候通过受信任的提供程序登录,则用户以前登录过的所有不受信任的提供程序都将从帐户中删除。此外,用户将永远不会被允许再次登录不受信任的提供商。提供商是否可信似乎取决于使用提供商创建的新帐户是否通过向创建新帐户的地址发送验证电子邮件来专门验证该帐户

我似乎找不到一个关于哪些提供者是可信的和不可信的全面列表。通过在我的应用程序中实施这些解决方案,我发现:

受信任的提供商:

  • 苹果
  • 谷歌
  • Microsoft(如果创建帐户时使用的电子邮件为 a@outlook.com或@hotmail.com)
不受信任的提供商:

  • 脸谱网
  • Microsoft(如果创建帐户时使用的电子邮件不是@outlook.com或@hotmail.com)
这种理解正确吗?我在哪里可以找到其他供应商的细分?我的应用程序内置于Unity,因此我将仅限于Unity中Firebase支持的提供商。为什么在不同的情况下,Microsoft既是一个受信任的提供商又是一个不受信任的提供商?我真的需要一些帮助

我的应用程序是针对iOS和Android的。我想专门使用Apple和Google登录,但iOS<13的用户无法使用Apple登录。这些iOS设备似乎占西方国家所有设备的六分之一左右。我试图实现Google和Microsoft登录,以获得对这些用户的良好覆盖,但后来我遇到了复杂的情况,即Microsoft登录既受信任又不受信任。我不想通过手动帐户合并使我的应用程序过于复杂,但我不知道其他哪些提供商是完全值得信任的。让事情简单愚蠢的最佳解决方案是什么?

可信提供商:

  • 谷歌(前提是由谷歌发布,例如@gmail.com)
  • 雅虎(前提是由雅虎发布,例如@Yahoo.com)
  • Microsoft(前提是由Microsoft发布,例如@outlook.com)
  • 苹果(总是经过验证的。苹果的卖点是账户经过验证和多因素认证)
  • 电子邮件链接验证
不受信任的提供商使用非提供商发布的电子邮件:

  • 脸谱网
  • 推特
  • GitHub
  • 谷歌、雅虎、微软等,只要它们不是由IdP发行的
  • 未经电子邮件验证的电子邮件/密码

FialBaseAuthTo安全且不考虑某些提供者验证,因为在某些情况下,电子邮件被验证一次但不连续验证(在某些情况下,IPSP允许您在验证后更改电子邮件而不需要重新验证)。 解释未经验证账户敏感性的最佳方法如下: 1.攻击者使用电子邮件向未经验证的提供商(密码)注册victim@example.com他们不拥有的 2.电子邮件所有者注册victim@example.com使用经过验证的提供商Google

如果帐户未重置且密码未链接,则攻击者将保持对其不拥有的帐户的访问权限。要解决此问题,用户必须在步骤2之前验证电子邮件(通过发送电子邮件验证)。通过这样做,登录谷歌将自动合并帐户并保留密码

这就是为什么在某些情况下会出现错误:

  • 使用电子邮件向未经验证的提供商注册user@example.com
  • 使用同一电子邮件的另一个未经验证的提供商登录
  • 验证第一个帐户的所有权后要求链接时引发错误
  • 用户希望从步骤1登录到帐户
  • 用户现在可以从步骤2链接帐户的凭据
  • 以下是各种情况下的行为摘要:

  • 现有未经验证的提供商,请与同一电子邮件的另一个未经验证的提供商登录->引发需要链接的错误。(例如,Facebook紧随其后的是GitHub)
  • 现有已验证的提供程序,请与同一电子邮件的另一个未验证的提供程序登录->引发需要链接的错误。(例如,谷歌紧随其后的是Facebook)
  • 现有未验证的提供程序,使用同一电子邮件的验证提供程序登录->验证提供程序覆盖未验证的提供程序。(例如,Facebook紧随其后的是谷歌)
  • 现有验证提供程序,与同一电子邮件的另一个验证提供程序登录->链接的两个提供程序没有任何错误。(例如,苹果紧随其后的是谷歌)
  • 如果您不同意FialBaseAuthand并希望将脸谱网视为已验证的提供者,您可以随时使用E.P/P>在脸谱网登录后将电子邮件设置为验证。


    希望这有助于澄清这种行为。

    当您编写“需要抛出链接的错误,是不是
    FirebaseAuthUserCollisionException
    ”时,根据文档,应该在用户每次尝试使用第二个Bprovider(链接到)登录时抛出该错误a@b.com)当已经使用Provider创建了帐户时(链接到a@b.com)但事实上,我发现这篇文档有误导性,因为谷歌和苹果使用相同的电子邮件地址登录(当电子邮件地址共享时)以静默方式合并,而不是抛出
    FirebaseAuthUserCollisionException
    。这是否意味着,当受信任的提供者共享相同的电子邮件地址时,它们会合并到单个帐户中,但如果其中一个是不受信任的提供者,则会抛出github上的
    FirebaseAuthUserCollisionException
    ?线程: