如何仅使用 API 密钥进行 Firebase HTTP restful 调用?

How do I make Firebase HTTP restful calls using just an API key?

我需要对我的 firebase 数据库的特定区域进行 restful 调用。该调用需要作为未经身份验证的用户进行,但我想使用 header 中的 API_KEY 来保护它,以防止机器人拖网数据。数据库规则将使数据 read-only 给 un-authenticated 用户。我如何才能只允许 HTTP 调用使用 Firebase 中的 API 键读取数据?

我在身份验证请求上找到了 this section,但我需要发出原始 HTTP 请求,无法使用所提供示例中支持的 SDK 方法。

你想做的事是不可能的。实时数据库没有可由安全规则控制的专用 API 密钥。您的数据库有一个(遗留的)私钥,可以有效地让用户完全访问数据库中的所有内容。你不应该再使用它了。

另一种身份验证形式是您链接的身份验证形式。您将需要执行 OAuth2 身份验证以获取属于 Google 用户帐户或 Firebase 用户帐户的令牌。您在原始 HTTP 请求中使用该令牌。

没有其他方法可以指定对数据库的任何类型的可由安全规则控制的特殊访问权限。如果不使用上述两种方法中的任何一种,您实际上只能读取安全规则完全允许的数据 public.

一种简单的方法,可以在您的数据库中指定一个特定的不可猜测的路径供此客户端访问,并允许 public read/write 在那里访问。例如:

{
  "rules": {
    "content_4287dhicer29pr2sdkuyfweuf": {
      ".read": true,
      ".write": true
    }
  }
}

现在任何知道此密钥的人 content_4287dhicer29pr2sdkuyfweuf 都可以 read/write 它,但只有知道它的人才能使用。由于密钥是无法猜测的,因此如果不从您那里得到它,任何人都不太可能找到它。好吧,也许你可以想出一种比用手敲键盘更好的方法来生成令牌。 :)

我们在这里所做的基本上是将 API 密钥嵌入到数据库中的密钥中。因此,它现在位于 URL.

中,而不是在您的请求中 header 中