【问题标题】:Securely setting the first custom claim on a Firebase user安全地为 Firebase 用户设置第一个自定义声明
【发布时间】:2021-06-16 07:28:17
【问题描述】:

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

Firebase 为理解和使用自定义声明提供了一些出色的文档和示例,例如this great video example——但大多数示例使用现有的自定义声明来授权创建其他自定义声明;从这篇文章开始,Firebase 控制台无法设置/编辑/查看自定义声明,也无法通过 CLI 设置自定义声明。

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

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

你有没有遇到过这个问题并更优雅地解决了?

【问题讨论】:

    标签: firebase firebase-authentication firebase-admin


    【解决方案1】:

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

    所以,在这个限制内,你可以做任何你想做的事。 IMO,您问题中的前两个选项是完全有效且好的选项。大约一年前,我写了一篇文章 (How to create an Admin module for managing Firebase users access and roles),其中我们使用 Callable Cloud Function 来完成这项工作。今天,在我的大多数项目中,我更喜欢使用触发 Cloud Function 的 Firestore 集合,但它或多或少是等效的(文章中的 Callable Cloud 函数实际上创建了一个 Firestore doc)。

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


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

    您可以按照文章及以上所述进行操作。简而言之:

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

    你已经完成了,没有安全漏洞。


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

    【讨论】:

    • 嘿@zachary-reachodin,你有时间看看建议的答案吗?
    • 谢谢@Renaud Tarnec 这既验证了我的猜测,又提供了很好的指导!
    猜你喜欢
    • 1970-01-01
    • 2019-12-17
    • 2020-10-11
    • 2019-07-02
    • 1970-01-01
    • 1970-01-01
    • 2020-06-28
    • 1970-01-01
    • 2020-01-30
    相关资源
    最近更新 更多