为 Firebase 用户安全地设置第一个自定义声明

zac*_*din 3 firebase firebase-authentication firebase-admin

为所有 Firebase 用户设置第一个自定义声明的标准、安全方法是什么?

Firebase 提供了一些很棒的文档和示例来理解和使用自定义声明(例如这个很棒的视频示例),但大多数示例使用现有的自定义声明来授权创建其他自定义声明;截至本文,Firebase 控制台无法设置/编辑/查看自定义声明,也无法通过 CLI 设置自定义声明。

以下是我正在考虑的一些选择:

  • 创建一个不同的管理项目,服务帐户可以使用该项目通过 Firebase Admin SDK 创建自定义声明。
  • 如果执行了某个 Firebase 控制台操作,则使用云函数执行自定义声明创建,例如在通过安全规则无法访问的集合中创建 Firestore 文档。
  • 忽略创建第一个自定义声明的安全性;仅当这已经是 Firebase 用户的自定义声明后才添加安全性。

您是否遇到过这个问题并更优雅地解决了它?

Ren*_*nec 8

没有真正的标准方法来设置自定义声明。如您所知,唯一的限制是它们只能通过 Firebase Admin SDK 从特权服务器环境设置,即从您的一台服务器设置,或者通过云功能更简单、更面向无服务器。

所以,在这个限制之内,你可以做任何你想做的事。IMO,你问题中的前两个选项是完全有效且良好的。大约一年前,我写了一篇文章(如何创建管理模块来管理 Firebase 用户访问和角色),其中我们使用可调用云函数来完成这项工作。如今,在我的大多数项目中,我更喜欢使用触发 Cloud Function 的 Firestore 集合,但它或多或少是等效的(本文中的 Callable Cloud 函数实际上创建了一个 Firestore 文档)。

在本文中,我分享了创建第一个声明(我将其称为管理员用户声明)的简单方法:使用通过在临时、安全的 Firestore 集合中创建文档来触发的临时云函数。这不是一个非常复杂和优雅的方法,但它可以完成工作......


关于您的第三个选项(“忽略创建第一个自定义声明的安全性”),我认为您不需要也不应该这样做。

您可以按照文章和上面的描述进行操作。简而言之:

  1. 设置您的系统,将访问权限限制为具有管理员自定义声明的用户(例如,在专用 Firestore 集合中创建文档的安全规则,或检查调用者是否具有管理员声明的可调用云函数)
  2. 在Auth服务中创建管理员用户
  3. 通过上面详述的方法为他分配管理员用户声明。

您已完成并且没有安全漏洞。


最后,值得注意的是,今年 1 月推出了一个新的实验性扩展,专门用于通过 Firestore 设置声明。请参阅此处此处