如何仅使用API​​密钥进行Firebase HTTP静态调用?

时间:2018-11-20 03:15:37

标签: firebase firebase-realtime-database api-key

我需要对我的Firebase数据库的特定区域进行宁静的调用。该调用需要以未经身份验证的用户身份进行,但我想使用标头中的API_KEY来保护它,以防止漫游器抓取数据。数据库规则将使未经身份验证的用户对数据只读。如何仅允许HTTP调用使用Firebase中的API密钥读取数据?

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

2 个答案:

答案 0 :(得分:2)

您无法执行的操作。实时数据库没有可以由安全规则控制的专用API密钥。您的数据库具有一个(旧式)私钥,可以有效地使用户完全访问数据库中的所有内容。您不应该再使用它。

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

没有其他方法可以指定可以由安全规则控制的对数据库的任何特殊访问。无需使用以上两种方法中的任何一种,您就可以有效地读取仅安全规则允许完全公开的数据。

答案 1 :(得分:1)

一种简单的方法,可以在数据库中指定特定的不可猜测路径供此客户端访问,并允许在那里进行公共读/写访问。例如:

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

现在,任何知道此密钥content_4287dhicer29pr2sdkuyfweuf的人都可以读/写它,但是只有知道它的人才能读/写。而且,由于该密钥非常难以猜测,因此几乎不可能有人在不从您那里得到它的情况下找到它。好吧,也许您可​​以想出一种比在键盘上砸手更好的方法来生成令牌。 :)

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