【问题标题】:Administration access using the Firestore REST API使用 Firestore REST API 进行管理访问
【发布时间】:2018-08-05 16:09:35
【问题描述】:

我们发现,在我们的用例中,Firestore REST API 比使用firebase-admin 的默认数据库连接读取数据的性能要好得多。

我们在我们的服务器上使用 Firestore,并且我们使用 read/write: false 规则在锁定状态下存储了一些敏感数据。这样只有服务器才能从我们的服务帐户中读取这些数据。

由于 Firestore 握手过程的性能原因,我们(因为我们使用 lambda)使用 REST API 从数据库请求数据要快得多。

但是,我们在访问处于锁定状态的数据时遇到了问题,因为似乎授权 REST API 的唯一方法是使用客户端的授权令牌。

我们需要一种通过 REST API 进行管理数据库访问的方法,是否有一些特殊的授权标头或 API 密钥我们无法找到允许这样做的地方?

【问题讨论】:

  • SDK 比 REST 慢我有点惊讶。您有要分享的基准吗?
  • 我们有几个,firestore 上的初始获取请求需要 1.5-2 秒,随后的请求无疑更快,但由于我们平均每个端点发出 1-2 个请求,因此 400-600 毫秒REST API 的性能要高得多。这在几个链接中都有讨论Link1Link2Link3
  • @DougStevenson 这里有一些链接,虽然它们不是我们的直接基准,但如果您需要,我可以提供它们:)
  • 值得注意的是,由于我们使用的是 lambda,几乎每个对我们服务器的请求都会发出一个新的 Firestore 握手/“冷启动”/您想调用的任何名称。在我放置的最后一个链接中,其中一位 cmets 详细解释了这一点,以及他如何使用带有 EC2 实例的 firebase-queue 来解决它。我们选择了 REST API,因为我们不想管理 EC2 实例。

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


【解决方案1】:

您需要使用有权访问数据库的服务帐户的凭据进行身份验证。根据documentation

如果您使用服务帐户和 Google 验证您的请求 Identity OAuth 2.0 令牌,Cloud Firestore 假定您的请求 代表您的应用程序而不是单个用户行事。云 Firestore 允许这些请求忽略您的安全规则。 相反,Cloud Firestore 使用 Cloud Identity and Access Management (IAM) 来确定请求是否被授权。

您项目的默认 App Engine 服务帐户应该已经能够执行此操作。获得服务帐户的令牌后,您可以在请求的 Authorization 标头中传递它,文档中也提到了这一点。

【讨论】:

  • 感谢您指出这一点,我们为 NodeJS 使用 firebase-admin 库。因此,当我们创建我们的 firebase 实例时,我们会使用 firebase.credential.cert(...) 使用 JSON 文件。我真的不明白我们应该将什么传递给 API 请求,或者我们应该如何从文档中获取它。
  • 您是否按照文档中有关如何为您的服务帐户获取 oauth 令牌的链接进行操作?
  • 是的,但是我在创建 JWT 令牌时可能做错了,这就是我所拥有的.. const jwt = require('jsonwebtoken') return jwt.sign( { algorithm: 'RS256', expiresIn: 3600, notBefore: Math.round(Date.now() / 1000), 观众: 'firestore.googleapis.com/google.firestore.v1beta1.Firestore', issuer: this.serviceEmail, subject: this.serviceEmail, keyid: this.keyId }, this.privateKey)
  • 在尝试使用 oAuth 后,我们不断收到状态码 401
  • 这听起来像是一个不同的问题 - 在 cmets 中解决这个问题并不可行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-22
  • 1970-01-01
  • 2017-11-14
相关资源
最近更新 更多