如果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、android 或 ios),因为没有我将签名概念设置为真值。
但是现在问题来了,我怎样才能使我的 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 删除