如何安全下载和使用Firebase管理员SDK服务帐户

时间:2019-06-09 22:51:20

标签: firebase google-cloud-firestore google-cloud-storage firebase-admin

我正在编码Firebase应用程序。 用户只能读取数据库,所有者可以在数据库中写入内容以添加一些内容。

所有者需要一个管理桌面应用程序才能在数据库(存储和数据库)上上传数据。 由于该应用程序是C ++应用程序,因此我将使用python与Firebase通信。

我想使用Pyrebasepython-firebase,但不幸的是,这些项目似乎不支持新的数据库Firestore…

其余API可以使用,但是...仅适用于Firestore数据库部分...

然后,将内容添加到Firestore和存储的唯一方法就是使用admin SDK。

我知道C ++应用程序将仅在所有者计算机上使用,但我担心会获得服务帐户文件。

安全使用服务帐户文件的最佳方法是什么?

我想:

  1. 使用密码加密文件,然后每次输入密码 C ++需要使用admin SDK的时间(哪种技术是 对此更好吗?)
  2. 每次需要时下载服务帐户文件(但是在哪里 将其安全地存储在云中?)

1 个答案:

答案 0 :(得分:0)

为了对项目使用Admin SDK,您必须有权访问该项目的服务帐户凭据。有了这些凭据,您就可以完全无限制地访问该项目。您应该仅将服务帐户凭据分发给应该具有这种访问权限的用户,通常是项目中的协作者。

对于不是项目合作者的应用程序级管理员,我通常建议设置一个包含服务器端和客户端组件的管理仪表板。

服务器端组件在受信任的环境中运行,对我而言,它通常是Cloud Functions,但也可以是您控制的服务器,甚至是您的开发机器。在这里,您可以使用Admin SDK来执行应用程序管理操作,然后将其暴露在客户端应用程序可以调用的经过身份验证的端点中。

客户端组件是应用程序管理员使用的。对我来说,这通常是一个非常简单的网页,但也可以是您喜欢的任何其他技术,只要它可以调用您在服务器上公开的端点即可。

这里的关键是服务器在代表他们执行管理操作之前,先验证调用它的用户是否有权这样做。使用这种方法,您不必将服务帐户凭据提供给非协作者,并且可以在需要时撤消管理员的凭据。