我应该将 google-services.json(来自 Firebase)添加到我的存储库吗?
Posted
技术标签:
【中文标题】我应该将 google-services.json(来自 Firebase)添加到我的存储库吗?【英文标题】:Should I add the google-services.json (from Firebase) to my repository? 【发布时间】:2016-09-18 09:45:42 【问题描述】:我刚刚注册了 Firebase,并创建了一个新项目。 Firebase 询问我的应用程序域和 SHA1 调试密钥。我输入了这些详细信息,它生成了一个 google-services.json 文件供我添加到我的应用模块的根目录中。
我的问题是,是否应该将此 .json 文件添加到公共(开源)存储库中。是否应该保密,例如 API 密钥?
【问题讨论】:
【参考方案1】:google-services.json
文件是 from the Firebase doc:
Firebase 通过一个配置文件管理您的所有 API 设置和凭据。 该文件在 android 上命名为
google-services.json
,在 ios 上命名为GoogleService-Info.plist
。
将其添加到.gitignore
并且不将其包含在公共回购中似乎是有意义的。
这在issue 26 中进行了讨论,并详细介绍了google-services.json
包含的内容。
像googlesamples/google-services
这样的项目确实有它in its .gitignore
。
虽然,作为commented by stepheaw,这个thread does mention
对于库或开源示例,我们不包含 JSON 文件,因为其目的是用户插入自己的代码以将代码指向自己的后端。 这就是为什么我们在 GitHub 上的大多数 Firebase 存储库中都看不到 JSON 文件的原因。
如果“数据库 URL、Android API 密钥和存储桶”对您来说不是秘密,那么您可以考虑将文件添加到您的存储库中。 正如“Is google-services.json safe from hackers?”中提到的,这并不是那么简单。
baueric 询问the comments:
在那篇文章中他说:
JSON 文件不包含任何超级敏感信息(如服务器 API 密钥)
但
google-services.json
确实有名为api_key
的条目。 这与“server api key
”是否是不同的 api 密钥?
Willie Chalmers III 指向“Is google-services.json safe from hackers?”,并添加:
是的,该 API 密钥不是永远不应该公开的服务器 API 密钥,因此如果您的
google-services.json
对其他人可见,那很好。无论如何,您仍应限制您的客户端 API 密钥在 Google Cloud 控制台中的使用方式。
【讨论】:
这实际上是不正确的;一位 Firebase 工程师说,检查源代码控制是 okay。 @Yaron 的回答是正确的。 @WillieChalmersIII 好的。我已经相应地修改了答案。 @WillieChalmersIII 在那篇文章中,他说“JSON 文件不包含任何超级敏感信息(如服务器 API 密钥)”,但google-services.json
确实有名为 api_key
的条目。那是与“服务器 api 密钥”不同的 api 密钥吗?
@baueric 请参阅this 回答以获取更多信息。是的,该 API 密钥不是永远不应该公开的服务器 API 密钥,所以如果您的 google-services.json
对其他人可见,那很好。无论如何,您仍应限制您的客户端 API 密钥在 Google Cloud 控制台中的使用方式。【参考方案2】:
从this 讨论看来,您可以将其添加到公共回购中。无论如何,它的内容最终都在 APK 中,并且可能很容易提取。
【讨论】:
我同意,我现在正在处理这个问题。有没有办法从反编译 APK 的人那里加密该文件中的密钥? 虽然 API 密钥确实可以很容易地从 apk 中提取出来,但问题是google-services.json
是否应该在 公共开源 repo 中进行源代码控制。在绝大多数情况下,答案肯定是 NO - 除非 repo 所有者希望全世界默认使用他们的 Google 帐户 API 配额。 @VonC 的答案是正确的。
hitraj47 询问是否将其添加到 public 存储库。该讨论没有提到公共存储库,他们似乎在讨论私有存储库。
请注意,可以使用签名和签名对密钥进行保护。因此,其他人看到密钥没有问题,因为没有您的签名密钥他们无法使用它
你能解释一下吗?如果我用另一个密钥保护这个密钥,最终我的应用程序需要第二个密钥才能使用第一个密钥。所以我最终遇到了同样的问题,即将该密钥保存在存储库中的何处。以上是关于我应该将 google-services.json(来自 Firebase)添加到我的存储库吗?的主要内容,如果未能解决你的问题,请参考以下文章
无法在 google-services.json 中获取 firebase_url
将 google-services.json 提交到 GitHub
如何在 Android 中添加 google-services.json?