多个用户的 Firebase 实时数据库身份验证

Posted

技术标签:

【中文标题】多个用户的 Firebase 实时数据库身份验证【英文标题】:Firebase real-time database authentication for multiple users 【发布时间】:2018-07-15 16:04:10 【问题描述】:

我一直在为 Firebase 实时数据库中的多个用户寻找简单的身份验证机制。例如:我不希望所有数百万用户都使用电子邮件和密码登录以实时访问 Firebase。

我从以下文档中创建了自定义令牌。

https://firebase.google.com/docs/auth/admin/create-custom-tokens

我想清楚地了解这一点。这是否有助于通过自定义令牌以编程方式对多个用户(分组为一个)进行身份验证,而不是每个用户都必须使用电子邮件地址和密码进行身份验证?还是这跟我想的不一样?

请指教。

【问题讨论】:

【参考方案1】:

不,当您拥有自己的用户数据库时使用自定义令牌,这些用户已经使用您提供的某种其他形式的凭据登录到现有服务。

如果您没有自己的用户数据库,自定义令牌将无济于事。

此外,为了使用 Firebase 身份验证进行身份验证,没有“分组”用户这样的事情。每个用户都有自己独特的身份和各自独立处理的凭据。

【讨论】:

分组用户含义,请查看“Frank van Puffelen”答案,我们可以将用户 ID 列表分组。只有他们被允许进行身份验证和访问。 我还没有得到这个 -> “当您拥有自己的用户数据库并且已经登录到您的现有服务时使用自定义令牌”。与 Firebase 实时数据库服务有什么区别? 如果您不想使用 Firebase 身份验证允许的提供商之一(如 Facebook、Google、Twitter 等),您可以为此使用自定义令牌。这是自定义令牌的唯一真正用途。 那么多用户单一认证方式,我可以选择token机制代替邮箱登录吗?【参考方案2】:

当您拥有自己的身份验证服务但希望允许您的用户访问 Firebase 服务时,可以使用自定义令牌。如果你想让你的用户不用邮箱和密码也能使用数据库,可以use a provider如谷歌或者使用Anonymous authentication,此时用户登录后可以访问数据库,但不要必须证明他们是他们自己。您以后可以随时将他们添加为实际用户。

要允许经过身份验证的用户访问数据库,您可以使用以下规则:

// These rules require authentication

  "rules": 
    ".read": "auth != null",
    ".write": "auth != null"
  

Database Rules Docs

【讨论】:

【参考方案3】:

用户登录(身份验证)和访问您的数据库(授权)之间存在差异。

无法阻止用户使用您在 Firebase 控制台中启用的 Firebase 身份验证的内置提供程序进行身份验证。但是,使用 Firebase 的服务器端安全规则只允许特定用户访问您的数据库中的数据非常容易。

例如,如果您只希望特定用户访问,您可以设置他们的 UID 的白名单:

allowedUsers
  uid1: true,
  uid2: true,
  uid3: true

现在您可以编写一个简单的安全规则,只允许此列表中的用户读取您的数据库:


  "rules": 
    ".read": "root.child('allowedUsers').child(auth.uid).exists()"
  

【讨论】:

太棒了!但是,当我们有数百万用户在使用我们的应用程序并且我们想通过 Firebase 提供身份验证机制时该怎么办?所有用户都必须使用一个电子邮件地址和密码登录才能进行身份验证。这是我的问题。 这几百万用户有什么共同点?如果他们没有任何共同点,您所能做的就是列举他们的帐户。 “无法阻止用户使用 Firebase 身份验证的内置提供程序进行身份验证。”这仅适用于您在控制台中允许的身份验证提供程序。

以上是关于多个用户的 Firebase 实时数据库身份验证的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Firebase 身份验证链接到实时数据库?

处理 Firebase 身份验证和数据库实时之间事务的最佳方式

用于 Firebase 实时数据库/Firebase 身份验证的 Android 唯一密钥

使用 Parse 用户进行 Firebase 身份验证

从 Firebase 身份验证中删除用户

Firebase 安全性和电话身份验证