如何为Firebase网络应用构建受保护且安全的管理员部分?

时间:2019-06-11 10:50:42

标签: firebase firebase-authentication google-cloud-firestore

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

现在,我将所有内容都设置在一个Firebase项目中,并且我打算采用“ hidden”受保护的路由,例如www.myFirebaseProject.com/admin-xyz。 PS:我知道这并不是真正的隐藏,但是我的意思是无法通过点击来访问它。

admin到达该URL时,他们将提供usernamepassword,并被授予访问管理面板和为博客创建帖子的权限。 / p>

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

enter image description here

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

从我到目前为止的想法来看,在保持安全的同时,我有两种选择:

选项1:

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

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

选项2:

  

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

     

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

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

问题1:

  1. 我对吗,任何恶意用户都可以仅通过检查以下这些Firebase信息来创建新帐户?
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",
};

问题2:

  1. 在这种情况下,上面列出的哪个选项是最佳做法?我能从他们两个人中获得期望的行为,还是一个比另一个更好?

1 个答案:

答案 0 :(得分:1)

问题1:

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

问题2:

如果您偶尔需要创建管理员(您将对其进行手动标记),则可以使用自定义声明。将数据库用于用户角色使您在管理角色方面更具灵活性。 然后,您可以在前端使用这些声明(例如,角度身份验证防护)来强制管理员角色访问您的视图。

警告:还要对要限制为管理员的数据进行管理员角色检查。