firebase - 如何安全下载和使用 Firebase admin SDK 服务帐号
问题描述
我正在编写一个 Firebase 应用程序。用户只能读取数据库,所有者可以在数据库中写入以添加一些内容。
所有者需要一个管理桌面应用程序来上传数据库(存储和数据库)上的数据。由于该应用程序是 C++ 应用程序,因此我将使用 python 与 Firebase 进行通信。
我想使用Pyrebase或python- firebase但不幸的是这些项目似乎不支持新的数据库 Firestore...</p>
其余的 API 可以工作,但......只有 Firestore 数据库部分......
我将内容添加到 Firestore 和存储的唯一方法是使用 admin sdk。
我知道 C++ 应用程序将仅在所有者计算机上使用,但我担心获取服务帐户文件。
安全使用服务帐户文件的最佳方法是什么?
我想:
- 用密码加密文件,然后每次 c++ 需要使用 admin sdk 时询问密码(哪种技术会更好?)
- 每次应用程序需要时下载服务帐户文件(但在哪里安全地存储在云中?)
解决方案
要将 Admin SDK 用于项目,您必须有权访问该项目的服务帐户凭据。有了这些凭据,您就可以完全且无限制地访问该项目。您应该只将服务帐户凭据分发给应该具有此类访问权限的用户,通常是项目的协作者。
对于不是项目合作者的应用程序级管理员,我通常建议设置一个带有服务器端和客户端组件的管理仪表板。
服务器端组件在受信任的环境中运行,对我来说通常是 Cloud Functions,但也可以是您控制的服务器,甚至是您的开发机器。这是您使用 Admin SDK 执行应用程序管理操作的地方,然后您在客户端应用程序可以调用的经过身份验证的端点中公开这些操作。
客户端组件是应用程序管理员使用的。对我来说,这通常是一个非常简单的网页,但它也可以是您喜欢的任何其他技术,只要它可以调用您在服务器上公开的端点。
这里的关键是服务器在代表他们执行管理操作之前验证调用它的用户是否有权这样做。使用这种方法,您不必将服务帐户凭据提供给非协作者,并且可以在需要时撤销管理员的凭据。
推荐阅读
- reactjs - React.js 编译失败:意外令牌
- javascript - 在嵌入 discord.js 中设置命令
- django - 表达式只能用于更新,不能用于插入
- typescript - TypeScript 如何为泛型函数创建泛型类型别名?
- windows - 如何使用 CLI 在 PostgreSQL 中创建新数据库
- azure - 在表之间转换 Azure 数据工厂中的数据类型
- php - 如何处理我在 PHP 中扩展的类的不同版本?
- postgresql - Postgresql:从gzip复制+无效的字节序列编码
- java - Junit @Tag - 运行测试时无法使用 any() 和 none() 标签
- python - 如何在 PyQt5 中设置 PlotWidget 刻度颜色?