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