如何在 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 中创建基于角色的访问控制或自定义声明的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在模型中创建条件关联?

如何在 yii 中创建访问(查看页面)角色?

在 GCP Console 中创建存储分区后无法访问 Firebase 存储

在 Firebase 数据库中创建节点后,如何防止访问更改?

如何在 Firebase 中创建不同的用户组?

在 Postgresql 中创建基于角色的身份验证系统