查看 2022 年 Google I/O 大会上介绍的 Firebase 新动态。了解详情

了解如何使用和管理 Firebase 的 API 密钥

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

API 密钥是一个唯一的字符串,用于在与 Firebase 和 Google 服务交互时将请求路由到您的 Firebase 项目。本页面介绍了有关 API 密钥的基本信息以及在 Firebase 应用中使用和管理 API 密钥的最佳做法。

有关 API 密钥和 Firebase 的一般信息

Firebase 的 API 密钥与典型的 API 密钥不同

与通常使用 API 密钥的方式不同,Firebase 服务的 API 密钥用于控制对后端资源的访问;这只能通过 Firebase 安全规则(控制哪些用户可以访问资源)和 App Check(控制哪些应用可以访问资源)来完成。

通常,您需要严格保护 API 密钥(例如,通过使用保管库服务或将密钥设置为环境变量);但是,Firebase 服务的 API 密钥可以包含在代码或签入的配置文件中。

尽管 Firebase 服务的 API 密钥可以安全地包含在代码中,但在某些特定情况下,您应该对 API 密钥实施限制;例如,如果您使用 Firebase ML、带有电子邮件/密码登录方法的 Firebase 身份验证,或可计费的 Google Cloud API。稍后在此页面上了解有关这些案例的更多信息。

创建 API 密钥

一个 Firebase 项目可以有多个 API 密钥,但每个 API 密钥只能与一个 Firebase 项目相关联。

Firebase 为您的 Firebase 应用自动创建的 API 密钥

当您执行以下任一操作时,Firebase 会自动为您的项目创建 API 密钥:

  • 创建一个 Firebase 项目 > 自动创建的Browser key
  • 创建 Firebase Apple 应用 > 自动创建的iOS key
  • 创建 Firebase Android 应用 > 自动创建的Android key

您还可以在Google Cloud Console中创建自己的 API 密钥,例如用于开发或调试。在本页稍后部分了解有关何时推荐此功能的更多信息。

查找您的 API 密钥

您可以在 Google Cloud Console 的APIs & Services > Credentials面板中查看和管理您项目的所有API 密钥。

您还可以在以下位置找到与 Firebase 应用自动匹配的 API 密钥。默认情况下,同一平台(Apple vs Android vs Web)的所有项目 Firebase 应用程序都将使用相同的 API 密钥。

  • Firebase Apple 应用程序— 在 Firebase 配置文件GoogleService-Info.plistAPI_KEY字段中查找应用程序的自动匹配 API 密钥。

  • Firebase Android 应用程序— 在 Firebase 配置文件google-services.jsoncurrent_key字段中查找应用程序的自动匹配 API 密钥。

  • Firebase Web 应用程序— 在 Firebase 配置对象的apiKey字段中查找应用程序的自动匹配 API 密钥。

使用 API 密钥

API 密钥用于在与 Firebase/Google 服务交互时识别您的 Firebase 项目。具体来说,它们用于将 API 请求与您的项目相关联以进行配额和计费。它们对于访问公共数据也很有用。

例如,您可以通过将其值作为查询参数传递给 REST API 调用来显式使用 API 密钥。此示例显示您如何向动态链接链接缩短 API发出请求:

POST https://firebasedynamiclinks.googleapis.com/v1/shortLinks?key=API_KEY

当您的应用调用 Firebase API 时,您的应用将自动在 Firebase 配置文件/对象中查找您项目的 API 密钥。但是,您可以使用不同的机制设置 API 密钥,包括环境变量。

对 API 密钥应用限制(推荐)

尽管不必将 Firebase 服务的 API 密钥视为机密,但在某些特定情况下(见下文),您可能需要采取额外措施来保护您的项目不被滥用 API 密钥。

如果您使用基于密码的身份验证,请收紧配额

如果您使用基于密码的 Firebase 身份验证并且有人掌握了您的 API 密钥,那么只要这些数据受Firebase 安全规则保护,他们将无法访问您的任何 Firebase 项目的数据库或 Cloud Storage 数据。但是,他们可以使用您的 API 密钥访问 Firebase 的身份验证端点并对您的项目发出身份验证请求。

为了减少有人滥用 API 密钥来尝试暴力攻击的可能性,您可以收紧identitytoolkit.googleapis.com端点的默认配额,以反映您的应用程序的正常流量预期。请注意,如果您收紧此配额并且您的应用突然获得用户,您可能会出现登录错误,直到您增加配额。您可以在Google Cloud Console中更改项目的 API 配额。

为特定类型的 API 使用单独的受限 API 密钥

虽然用于 Firebase 服务的 API 密钥通常不需要被视为机密,但您应该对用于授予对您手动启用的 Google Cloud API 访问权限的 API 密钥采取一些额外的预防措施。

如果您使用 Firebase 未自动启用的 Google Cloud API(在任何平台上)(意味着您自己启用了它),您应该考虑创建单独的受限 API 密钥以与这些 API 一起使用。如果 API 用于计费的 Google Cloud 服务,这一点尤其重要。

例如,如果您在 iOS 上使用 Firebase ML 的 Cloud Vision API,则应创建单独的 API 密钥,仅用于访问 Cloud Vision API。

通过为非 Firebase API 使用单独的受限 API 密钥,您可以在必要时轮换或替换密钥,并向 API 密钥添加额外限制,而不会中断您对 Firebase 服务的使用。

使用特定于环境的 API 密钥(推荐)

如果您为不同的环境(例如登台和生产)设置不同的 Firebase 项目,则每个应用实例与其对应的 Firebase 项目进行交互非常重要。例如,您的暂存应用程序实例永远不应与您的生产 Firebase 项目通信。这也意味着您的临时应用程序需要使用与临时 Firebase 项目关联的 API 密钥。

为了减少从开发到暂存再到生产的代码更改问题,而不是将 API 密钥包含在代码本身中,将它们设置为环境变量或将它们包含在配置文件中。

请注意,如果您将 Firebase Local Emulator Suite 与 Firebase ML 一起用于开发,则必须创建并使用仅用于调试的 API 密钥。 Firebase ML 文档中提供了创建此类密钥的说明。

常见问题