限制 Firebase API 密钥

Posted

技术标签:

【中文标题】限制 Firebase API 密钥【英文标题】:Restricting Firebase API Keys 【发布时间】:2019-01-19 01:33:25 【问题描述】:

我一直在玩 Firebase,在阅读了文档(和其他 SO 问题)之后,我仍然对一些 API 密钥感到困惑。我将 Firebase 用于分析、Crashlytics 和性能。但也将其链接到 Google Play 和 AdMob。

当我第一次设置它时,在开发者控制台中创建了 3 个 API 密钥。

    浏览器键(由 Google 服务自动创建) android 密钥(由 Google 服务自动创建) 服务器密钥(由 Google 服务自动创建)

我尝试通读文档以查找描述如何使用这些键的位置,但我无法找到它。通过查看 Firebase 应用程序,看起来 Android Key 被用作 Web API KeyServer Key 被用作 Cloud Message Legacy Server Key(虽然,我不使用云消息传递)。我不确定 Firebase 如何使用 Browser Key

我要做的是尽可能限制这些密钥,以防止任何恶意使用它们。

我添加了以下 API 限制

    安卓密钥 Firebase 服务 API 服务器密钥 Firebase 云消息传递 API 浏览器密钥 Firebase 服务 API

我不完全确定这些限制是否适合我使用它们的目的,但至少据我所知,它适用于Android KeyServer Key。但是,Browser Key 限制似乎不起作用,因为当我重新部署我的应用程序时,Firebase 正在创建一个新的Browser Key

总结我的问题,我可以看到 Firebase 正在为我自动创建 API 密钥,但我找不到任何文档来讨论这些密钥如何用于我正在使用的 Firebase 的基本功能。我也不完全确定如何限制这些键,尤其是 Browser Key

【问题讨论】:

我也在想同样的事情。 Firebase 似乎会自动创建这些键,如果我更改它们,它们会重新创建。我不喜欢这些键似乎不受我的控制。 这里有同样的问题。我也想知道为什么他们生成不受限制的api密钥,似乎有点夸张。 你有没有找到问题的答案? 我还注意到其中一些 api 密钥出现在 google-services.json 文件中。我不知道该文件是否在已编译的应用程序中,但如果是的话,这将是值得关注的事情 我发现那个json文件中的key在apk中被编译为资源:groups.google.com/g/firebase-talk/c/bamCgTDajkw/m/uVEJXjtiBwAJ 【参考方案1】:

通过提供包名和 SHA1 指纹,可以将 Android Key 锁定为“Android 应用”。

这似乎会限制使用已签名 Android 代码的密钥?

我启用了这个限制,没有任何不良副作用。

【讨论】:

【参考方案2】:

您可以通过以下方式限制应用程序限制:HTTP 引荐来源网址、IP 地址、Android 应用程序、ios 应用程序。只有这些似乎有效

我发现最好不要限制对自动生成的 Firebase API 密钥的 API 调用。我已尝试对 Firebase Web API 密钥进行 API 限制,但更改会破坏其他组件。

我尝试将 API 调用限制为仅与 Firebase 或身份验证有关的调用。使用 Firebase 进行这些更改后,使用密码登录停止工作,并在 javascript 控制台中显示以下错误消息:

https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPassword?key=THE 1NOW1RESTRICTED1API1KEY

  "error": 
    "code": 400,
    "message": "EMAIL_NOT_FOUND",
    "errors": [
      
        "message": "EMAIL_NOT_FOUND",
        "domain": "global",
        "reason": "invalid"
      
    ]
  

【讨论】:

以上是关于限制 Firebase API 密钥的主要内容,如果未能解决你的问题,请参考以下文章

限制 Firebase API 密钥

Firebase API 密钥限制不适用于 Android 应用程序包名称和 SHA1 指纹

Firebase createUserWithEmailAndPassword()返回HTTP POST错误以及错误对象

Firebase 数据库会获取所有数据然后对其进行限制吗?

更改了 Firebase 项目,它给了我错误 [ API 密钥无效。请传递有效的 API 密钥。 ] 身份验证期间

来自远程 REST API 的 Firebase 分析?