【问题标题】:Interacting with the Firebase Firestore from a separate Python script without Admin privileges在没有管理员权限的情况下从单独的 Python 脚本与 Firebase Firestore 交互
【发布时间】:2021-03-30 13:00:50
【问题描述】:

我想通过 Python 与 Firestore 交互,以便在我正在开发的主应用程序之外存在的简单脚本中获取一些数据。然后我希望能够将该脚本分发给其他员工,而无需向他们提供可以无限制访问数据库的服务帐户(因为这将是一个重大的安全风险)。我希望他们可以通过 env 向脚本提供用户名和密码来进行身份验证。变量或运行时。

除了通过万能的服务帐户之外,还有什么方法可以从客户端应用程序外部以其他方式向 Firestore 进行身份验证?

我想以普通用户身份登录(以某种方式使用 auth API,就像客户端一样),但我找不到任何文档或示例,似乎我正在重新发明轮子写一个可以对用户进行身份验证并获取集合的 firebase API 包装器。编写我自己的端点供 Python 脚本使用也是如此——对于这样一个简单的场景来说,这似乎是一个巨大的矫枉过正(违背了后端作为服务的目的)。

【问题讨论】:

  • 我认为有很多方法可以做到这一点,但是我不了解用例。 “在客户端应用程序之外”或“以普通用户身份登录”是什么意思?
  • Firebase 旨在作为客户端应用程序的后端运行 - 无论是网络应用程序还是移动应用程序,所以我相信这暗示了当有人使用 Firebase 时存在。在这种情况下,您可以使用专为在客户端 JS 或 android/ios 中使用而设计的客户端库。我的问题是使用数据库规则,就像我从客户端进行身份验证一样,而不是从 Web/移动环境进行身份验证

标签: python firebase google-cloud-firestore


【解决方案1】:

我认为最简单的方法是使用Google Cloud Function

  1. 第一步是用任何可用的语言创建这样的http triggered function,这将根据需要从 Firestore 获得。如果函数在同一个项目中,则根本不需要身份验证。

  2. 云功能使用Google Cloud IAM to authorize。因此,您添加可以调用该函数的成员。因此,您必须为您需要的所有用户安排访问权限。您可以仅为此功能赋予每个用户角色“Cloud Functions Invoker”。

  3. 然后他们将能够从他们的帐户调用访问权限。如果特定用户安装了Cloud SDK (gcloud) 并登录到她/他自己的帐户,她/他可以调用函数 ex。与curl (reference):

curl https://REGION-PROJECT_ID.cloudfunctions.net/FUNCTION_NAME \ -H "Authorization: bearer $(gcloud auth print-identity-token)"

每个用户的命令都是相同的,因此您可以编写它的脚本。

我认为这是最简单的方法,我能够在大约 15 分钟内创建和测试这样的解决方案。

如果您只使用Firebase Console,而不使用 Google Cloud Console,这应该不是问题,因为 Firebase 项目实际上是 Google Cloud Project,所以您应该可以通过 Google Cloud Console 访问它。

还有什么这样的解决方案相当便宜。如果调用不会以数百万计,它可能以 free tier 或每月最多几美元结束。

【讨论】:

  • 在某种程度上确实如此,它可能确实是“最简单”的方法(如果是,它是可能的最佳答案)但我希望作为后端的东西服务不需要我使用 Cloud Functions 扩展后端来做这么简单的事情。我的直觉是我错过了一些解决问题的简单方法(而且云功能还不够简单),但这也可能只是针对 Firebase 的批评,而不是这个答案。
猜你喜欢
  • 2021-10-28
  • 2011-07-05
  • 2013-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-12
  • 1970-01-01
相关资源
最近更新 更多