我应该将 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

google-services.json 的真正作用是啥?

如何在 Android 中添加 google-services.json?

google-services.json 找不到与任何模块的包名称匹配的客户端

我可以通过更改 google-services.json 为一个应用程序使用两个 Firebase 项目吗?