如何在 Firebase 中创建基于角色的访问控制或自定义声明
Posted
技术标签:
【中文标题】如何在 Firebase 中创建基于角色的访问控制或自定义声明【英文标题】:How to create role-based access control or custom claims in firebase 【发布时间】:2018-09-27 21:06:41 【问题描述】:我正在使用 firebase-auth 和 firebase-ui-auth 构建一个 android 应用,用于 Firestore 中的身份验证和数据。我希望某些功能仅对管理员用户可用,因此我需要实现某种基于角色的访问控制。我无法在 Firebase 文档中找到任何示例。但是我已经能够找到this。它描述了 firebase-admin 库中的功能。
我刚刚将我的 Firebase 库更新到 15.0.0,但 firebase-admin 目前只有 5.9.0 版本,并且不会在 Android 中加载,因为我收到以下错误:
All firebase libraries must be either above or below 14.0.0
几个问题:
-
是否需要创建一个单独的 Web Admin 项目才能使用 firebase-admin 库?推荐的方法是什么?
这些声明存储在哪里?我假设它在我的 firebase 项目之外,但在控制台身份验证/用户表中看到此信息会很酷。
谁能分享一个 Android/Java 示例,说明我将如何从我的 Android 应用程序中读取这个新的自定义“管理员”声明?该页面似乎只包含一个 javascript 客户端示例。
【问题讨论】:
您可以使用安全规则实现基于角色的访问控制。你看过这个页面吗,firebase.google.com/docs/firestore/solutions/role-based-access ? 【参考方案1】:文档对此非常清楚。 您不能在客户端上使用 firebase-admin。这在您的服务器上运行。
您需要使用 firebase-admin 的服务器端代码来设置自定义声明,因为它们不是从客户端设置的。您不能让客户定义他们的权限。这是从服务器完成的。
声明存储在您项目的 Firebase 身份验证用户数据库中,并传播到相应用户的 ID 令牌。您无法从控制台看到它。您可以通过 admin sdk 查找用户来检查这些声明。
您现在可以直接从GetTokenResult
获取它。 getClaim
方法返回带有声明的地图。
【讨论】:
以上是关于如何在 Firebase 中创建基于角色的访问控制或自定义声明的主要内容,如果未能解决你的问题,请参考以下文章
在 GCP Console 中创建存储分区后无法访问 Firebase 存储