firebase https://firebase.google.com/docs/web/setup的文档告诉我们我们可以安全地公开firebase apiKey:
注意:Firebase配置对象包含唯一但非秘密的 您的Firebase项目的标识符。
本教程介绍了如何获取apiKey并将其插入到我们的Web应用程序的HTML代码中。每个人都可以阅读该密钥。我会理解这只是一个识别码。
但是最近我收到了来自Google的此消息:
我们检测到一个与 以下Google Cloud Platform项目:
[...]
在以下URL上找到密钥:
[...]
我们认为您或您的组织可能无意中 在公共资源或公共网站上发布了受影响的API密钥 (例如,凭据错误地上传到了诸如 GitHub。)
请注意,作为项目/帐户所有者,您有责任 保护您的钥匙。因此,我们建议您服用 请采取以下步骤来纠正这种情况:
- 如果此密钥旨在公开使用(或如果可公开访问 密钥是无法避免的): 登录到Google Cloud Console并查看API和 您帐户的结算活动,确保其用法符合 您所期望的。 在适用的API密钥中添加API密钥限制。
- 如果该密钥不是公开的: 重新生成受到破坏的API密钥:在中搜索凭据 云控制台平台,编辑泄漏的密钥,然后使用 重新生成密钥按钮以旋转密钥。有关更多详细信息,请查看 有关处理受到破坏的GCP凭据的说明。 立即采取措施,确保您的API密钥未嵌入公共源代码系统中,并以下载方式存储 目录,或无意间以其他方式共享。 在适用的API密钥中添加API密钥限制。
总的来说,我会说两种信息来源彼此相反。 apiKey是否为“非秘密”?我也不确定如何阅读相关问题Is it safe to expose Firebase apiKey to the public?。我了解如果规则允许,apiKey足以访问整个数据库。
第一个问题:我想知道是否可以确定apiKey只提供对数据库的访问(可以受规则限制),还是可以访问有关该项目的其他信息。那存储呢?用户可以读取文件吗?可以写吗?该密钥称为“ Web API密钥”,因此我知道是项目的唯一标识符。在收到来自Google的消息之前,我已经将其更多地视为标识符而不是密钥。由于对项目API的每次访问对我(项目所有者)来说都是潜在的成本,因此我了解为计费目的需要密钥。
第二个问题。由于我想完全控制哪些用户可以访问数据库,因此我的应用程序提出了REST api作为数据库的接口(使用函数)。因此,用户不应直接访问数据库。我有以下规则
service cloud.firestore {
match /databases/{database}/documents {
match /global/public {
allow read;
}
}
}
目的是用户只能阅读以/ global / public为前缀的文档(当前为空)。所以我认为数据库是安全的。现在,我想知道是否真的需要公开apiKey ...用户身份验证是否需要apiKey?如果是这样,我可以忽略来自Google的消息并让apiKey公开吗?