我刚刚注册了Firebase并创建了一个新的项目。Firebase要求我提供应用程序域和SHA1调试密钥。我输入了这些细节信息,它生成了一个google-services.json文件,让我将其添加到我的应用程序模块根目录中。
我的问题是,这个.json文件应该添加到公共(开源)存储库中吗?它是否应该像API密钥一样保密?
我刚刚注册了Firebase并创建了一个新的项目。Firebase要求我提供应用程序域和SHA1调试密钥。我输入了这些细节信息,它生成了一个google-services.json文件,让我将其添加到我的应用程序模块根目录中。
我的问题是,这个.json文件应该添加到公共(开源)存储库中吗?它是否应该像API密钥一样保密?
一个google-services.json
文件,来自Firebase文档:
Firebase通过单个配置文件管理您的所有API设置和凭据。
该文件在Android上命名为google-services.json
,在iOS上命名为GoogleService-Info.plist
。
将其添加到.gitignore
中并不包含在公共存储库中似乎是有道理的。
这在issue 26中进行了讨论,其中更详细地介绍了{{link4:google-services.json
}}包含的内容。
像 googlesamples/google-services
这样的项目,例如 其 .gitignore
尽管,如 评论 由 stepheaw 所指出,这个 线程提到了
如果 "数据库URL、Android API密钥和存储桶" 对您来说不是机密,那么您可以考虑将文件添加到您的仓库中。对于库或开源示例,我们不包括 JSON 文件,因为意图是让用户插入自己的文件来将代码指向他们自己的后端。
这就是为什么在我们大多数 Firebase 存储库中都看不到 JSON 文件的原因。
在那篇文章中,他说:
JSON 文件不包含任何超敏感信息(比如服务器 API 密钥)
但是
google-services.json
有一个名为api_key
的条目。
这是与 "服务器 API 密钥
" 不同的 API 密钥吗?
Willie Chalmers III指向“Google-services.json是否安全免受黑客攻击?”,并补充说:
是的,那个API密钥不是应该保密的服务器API密钥,所以如果您的
google-services.json
被其他人看到也没关系。无论如何,您仍然应该限制Google Cloud控制台中客户端API密钥的使用方式。
正如Puzz在评论中所指出的那样,还可以参考"将Firebase apiKey公开安全吗?"
在那个答案中,Frank Van Puffelen提到:
更新(2021年5月):由于名为Firebase App Check的新功能,现在实际上可以将对Firebase项目中后端服务的访问限制为只有来自在该特定项目中注册的iOS、Android和Web应用程序的访问。
根据此讨论,看起来您可以将其添加到公共存储库中。 它的内容最终会出现在APK中,并且可能很容易被提取。
google-services.json
。在绝大多数情况下,答案绝对是否定的 - 除非存储库所有者希望整个世界默认使用他们的Google账户API配额。@VonC的回答是正确的。 - friederbluemle这个文件的内容是公开的,Firebase文档中有说明:Firebase文档
The content of the Firebase config file or object is considered
public, including the app's platform-specific ID (Apple bundle ID or
Android package name) and the Firebase project-specific values, like
the API Key, project ID, Realtime Database URL, and Cloud Storage
bucket name. Given this, use Firebase Security Rules to protect your
data and files in Realtime Database, Cloud Firestore, and Cloud Storage.
回复 @Yaron 的最后一条评论。 根据我有限的 firebase 知识和使用经验。
在 firebase 项目控制台中(您可以在其中下载 google-services.json 并获取 API 密钥),您需要提供应用程序 ID,并提供 SHA 证书。 因此,为了使请求起作用,它必须来自与相同应用程序 ID 和证书对应的应用程序。
因此,在代码库中没有第二个密钥可隐藏。后端进行验证。
google-services.json
被其他人看到也没关系。无论如何,您仍然应该限制Google Cloud控制台中客户端API密钥的使用方式。 - Willie Chalmers III