Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何仅使用API密钥进行Firebase HTTP restful调用?_Firebase_Firebase Realtime Database_Api Key - Fatal编程技术网

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

如何仅使用API密钥进行Firebase HTTP restful调用?,firebase,firebase-realtime-database,api-key,Firebase,Firebase Realtime Database,Api Key,我需要对firebase数据库的特定区域进行restful调用。该调用需要以未经身份验证的用户身份进行,但我希望使用标头中的API_密钥来保护它,以防止机器人程序拖网数据。数据库规则将使数据对未经身份验证的用户是只读的。我如何才能只允许HTTP调用使用Firebase中的API密钥读取数据 我在身份验证请求中找到了,但我需要发出原始HTTP请求,并且无法使用所提供示例中支持的SDK方法。您尝试执行的操作是不可能的。实时数据库没有可由安全规则控制的专用API密钥。您的数据库有一个(遗留)私钥,可以

我需要对firebase数据库的特定区域进行restful调用。该调用需要以未经身份验证的用户身份进行,但我希望使用标头中的API_密钥来保护它,以防止机器人程序拖网数据。数据库规则将使数据对未经身份验证的用户是只读的。我如何才能只允许HTTP调用使用Firebase中的API密钥读取数据


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

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

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


没有其他方法可以指定可由安全规则控制的对数据库的任何类型的特殊访问。如果不使用上述两种方法中的任何一种,您将有效地绑定到安全规则允许完全公开的只读数据。

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

{
  "rules": {
    "content_4287dhicer29pr2sdkuyfweuf": {
      ".read": true,
      ".write": true
    }
  }
}
现在,任何知道该键
内容的人都可以读/写它,但只有知道它的人才能读/写。由于钥匙是无法使用的,如果没有你的帮助,任何人都不可能找到它。好吧,也许你能想出一个比用手敲击键盘更好的生成令牌的方法。:)


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

感谢您快速加入。因此,我只想访问数据库中有一个ID列表要验证的特定分支。数据本身并不敏感,但用户在此过程中未经身份验证。因此,我希望在这一点上使用类似于遗留令牌的东西,因为没有“用户”,只将其应用于数据库中的特定分支。遗留私钥允许使用它的任何人读取和删除整个数据库,而不必知道它的名称以外的任何信息。你不希望将其烘焙到你的应用程序中,因为那时它基本上是公共数据。根据你关于安全风险的建议,我创建了一个公共云函数,用于查询列表并在响应中返回布尔值。因此,您需要使用id发出请求,以确定该id是否已在数据库中注册,并防止将大量数据公开。如果该id已烘焙到可公开访问的移动应用程序中,则其背后的信息和一切基本上都是公开的。技术堆栈并不重要。谢谢你。我喜欢这个想法,但这条独特的道路是否会暴露给任何观看电话的人?ie如果有人在监视域,它可能会被黑客攻击?如果这个节点名被烘焙成发送给公共客户端的代码(在应用程序网站或其他地方),那么它实际上就是公共信息,任何人都可以发现它并完全控制它。@Dough Stevenson简单地锁定数据会更好吗,还有一个处理请求的公共云功能吗?我看不出这与在安全规则中直接访问每个人有什么不同。如果您将任何类型的私人信息(api密钥、密码、凭据等)烘焙到公共应用程序中,这实际上是公共信息,可能会被滥用。不过,这与您使用api密钥的提案没有什么不同。有权访问该应用程序的任何人都可以使用该API密钥并进行调用。防止这种情况发生的唯一方法是对用户进行身份验证,并在此基础上保护数据访问。