如果firebase没有身份验证,如何限制API密钥?

Posted

技术标签:

【中文标题】如果firebase没有身份验证,如何限制API密钥?【英文标题】:How to restrict API key if firebase don't have authentication? 【发布时间】:2021-10-15 16:57:30 【问题描述】:

我正在使用 firebase 创建一个应用程序。与我们的应用程序一样,没有登录概念(用户不需要登录应用程序)。所以现在我需要保护我的火力基地。

由于 API 密钥是公开的,但我们仍然可以将该 API 密钥限制为某个域或某个 IP。

这些 API 密钥由 firebase 自动创建。

让我们考虑一个网络应用程序,我选择 HTTP 地址并添加我的域。这意味着该密钥已绑定到我在 API 和服务 - 凭据部分中输入的域。

在实时 Firebase 安全规则中。


  /* Visit https://firebase.google.com/docs/database/security to learn more about security rules. */
  "rules": 
    ".write": "auth!=null && auth.uid === 'my uid'"
    ".read": true
  

我只是为写入添加了安全性,但对于应用程序用户(web、androidios),因为没有我将签名概念设置为真值。

但是现在问题来了,我怎样才能使我的 firebase 安全,以便如果任何其他应用程序或 web 应用程序使用我们的 firebase,它不应该返回数据。 它总是会抛出禁止或未经授权的错误,但不会抛出数据,因为我没有在我的密钥中绑定的未经授权的应用程序或域

为此,我限制了我的 API 密钥,

对于浏览器密钥,已添加授权域

对于安卓密钥,授权应用(SHA和包添加)

对于 ios 键,添加了捆绑的 id。

但该限制不适用于 API 密钥。

虽然当我添加身份验证时也读取了,然后 API 限制工作正常(但这仍然导致问题,因为我们的应用程序有数百万用户,它说“该项目的 SMS 配额已超出。超过验证密码的配额")

那么我应该如何限制 firebase 只监听我们的域和我们的应用程序?

我什至尝试匿名登录,但这不是解决方案,因为它会创建数百万不正确的匿名用户。此外,匿名帐户有 1 亿个限制。

也经过App Check,不同平台的不同provider,但也有配额限制所以没有检查

希望我能够解释这个问题。

任何建议都会很有帮助

【问题讨论】:

"如果任何其他应用程序或网络应用程序使用我们的 firebase,它应该返回数据" 你能解释一下吗?只要您有".read": true,任何使用SDK 或REST API 发出请求的人都将获得数据。 @Dharmaraj 问题已更新,如果读取时使用的任何其他应用程序或域为真,则不应返回数据 【参考方案1】:

您正在寻找的是 Firebase 的新 App Check 功能,它可以保护您的后端资源免受滥用。对于网络应用,App Check 使用 reCAPTCHA v3 来减少滥用的机会。

但我仍然建议您也实施身份验证和安全规则。如果您不想要求用户输入凭据,可以使用 Firebase 的 anonymous authentication 为他们生成唯一的 UID。然后,您可以在安全规则中检查该 UID,并仍然确保每个用户/设备仅访问他们被授权的数据。

【讨论】:

我已经检查了 APP Check 但它有一些配额。对于已经提到的匿名

以上是关于如果firebase没有身份验证,如何限制API密钥?的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有客户端身份验证的情况下从服务器验证 Firebase 用户?

通过 Firebase 身份验证和存储设置文件上传限制,中间没有服务器?

如何删除 Firebase 身份验证 google ID 删除

使用 ReactJS 和 Firebase 进行身份验证

Firebase 云功能,具有对外部 api 的基本身份验证的获取请求

如何从移动应用和节点 API 处理 Firebase 身份验证