如何为Firebase web应用程序构建受保护且安全的管理部分?

如何为Firebase web应用程序构建受保护且安全的管理部分?,firebase,firebase-authentication,google-cloud-firestore,Firebase,Firebase Authentication,Google Cloud Firestore,我有一个Firebase应用程序,它是一个基本的博客网站。我不会对普通用户进行任何身份验证。但是我需要一种方法来验证和/或授权管理员创建博客帖子 现在,我在一个Firebase项目中设置了所有这些功能,我计划有一个“隐藏的”受保护的路由,比如www.myFirebaseProject.com/admin xyz。PS:我知道这不是真正隐藏的,但我的意思是它不能通过点击访问 当管理员点击该URL时,他们将提供用户名和密码,并将被授予访问管理面板和创建博客帖子的权限 我可能不会有“创建帐户”页面和/

我有一个Firebase应用程序,它是一个基本的博客网站。我不会对普通用户进行任何身份验证。但是我需要一种方法来验证和/或授权
管理员创建博客帖子

现在,我在一个Firebase项目中设置了所有这些功能,我计划有一个“
隐藏的
”受保护的路由,比如
www.myFirebaseProject.com/admin xyz
。PS:我知道这不是真正隐藏的,但我的意思是它不能通过点击访问

管理员
点击该URL时,他们将提供
用户名
密码
,并将被授予访问管理面板和创建博客帖子的权限

我可能不会有“创建帐户”页面和/或表单,因为我可以并将直接从Firebase控制台手动创建和注册管理员用户

我主要担心的是,任何恶意用户都可能访问我的Firebase项目,并使用
Firebase.auth().createUserWithEmailAndPassword()创建新帐户,我说得对吗

根据我目前的想法,我有两种选择,既可以这样做,又可以保证安全:

选项1:

  • 创建两个用户,并在我的数据库(Firestore)中的用户文档上手动设置
    admin
    标志。从那时起,
    用户
    集合及其文档显然将受到保护,不会被写入任何内容

  • 使用Firestore中的该标志授权用户访问管理部分

选项2:

  • 设置自定义声明
Firebase Admin SDK支持在用户帐户上定义自定义属性。这提供了在Firebase应用程序中实施各种访问控制策略的能力,包括基于角色的访问控制。这些自定义属性可以为用户提供不同级别的访问权限(角色),这些权限在应用程序的安全规则中强制执行

可以为以下常见情况定义用户角色:

  • 授予用户访问数据和资源的管理权限
  • 定义用户所属的不同组
  • 提供多级访问:
    • 区分付费/未付费订户
    • 区分版主和普通用户
    • 教师/学生申请表等
  • 在用户上添加附加标识符。例如,Firebase用户可以映射到另一个系统中的不同UID

问题1:

  • 任何恶意用户只要检查下面的Firebase信息就可以创建新帐户,这是对的吗
  • 问题2:

  • 在这种情况下,上面列出的哪些选项是最佳做法?我能从他们两个身上得到想要的行为吗?或者说,其中一个比另一个更好
  • 问题1:

    是如果启用了电子邮件密码登录,则任何用户都可以使用前端配置在firebase中创建新用户帐户。因此,不能保证不会创建新用户

    问题2:

    如果您必须偶尔创建管理员(您将手动标记),则可以使用自定义声明。将数据库用于用户角色可以让您更灵活地管理角色。 然后,您可以在前端(例如angular auth guard)中使用这些声明来强制管理员角色访问您的视图

    注意:还要对您的数据应用管理员角色检查,您希望将这些检查仅限于管理员

    var firebaseConfig = {
      apiKey: "api-key",
      authDomain: "project-id.firebaseapp.com",
      databaseURL: "https://project-id.firebaseio.com",
      projectId: "project-id",
      storageBucket: "project-id.appspot.com",
      messagingSenderId: "sender-id",
      appID: "app-id",
    };