了解如何使用和管理 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 Authentication 与电子邮件地址/密码登录方法结合使用时,或使用计费 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 控制台中创建自己的 API 密钥,例如用于开发或调试的 API 密钥。您可以在本页面稍后部分中详细了解何时推荐执行此操作。

查找 API 密钥

您可以在 Google Cloud 控制台内的 API 和服务 > 凭据面板中查看和管理所有项目的 API 密钥。

您还可以在以下位置找到自动匹配到 Firebase 应用的 API 密钥。默认情况下,项目在同一平台(Apple、Android 或 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 请求与您的项目关联,用于配额和结算目的。它们也有助于访问公开数据。

例如,您可以显式使用 API 密钥,只需将其值作为查询参数传入 REST API 调用即可。以下示例展示了如何向 Dynamic Links Link Shortener API 发出请求:

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

您的应用调用 Firebase API 时,会在 Firebase 配置文件/对象中自动查找项目的 API 密钥。不过,您也可以使用环境变量等其他机制设置 API 密钥。

对 API 密钥施加限制(推荐)

虽然没有必要将 Firebase 服务的 API 密钥视为机密,但在某些特定情况下(见下文),您可能需要采取其他措施来防止您项目的 API 密钥遭到滥用。

使用基于密码的身份验证时收紧配额

如果您使用基于密码的 Firebase Authentication 身份验证机制,只要您的 Firebase 项目的数据库或 Cloud Storage 数据受到 Firebase 安全规则的保护,即便有人掌握了您的 API 密钥,也无法访问任何此类数据。但是,他们可以使用您的 API 密钥访问 Firebase 的身份验证端点,并向您的项目发出身份验证请求。

为了降低有人滥用 API 密钥进行暴力破解的可能性,您可以收紧 identitytoolkit.googleapis.com 端点的默认配额,使其满足应用的正常流量预期即可。但请注意,如果您收紧了此配额,当遇到应用用户激增的情况时,可能会收到登录错误,直到您增加配额为止。您可以在 Google Cloud 控制台中更改项目的 API 配额。

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

虽然用于 Firebase 服务的 API 密钥一般不需要视为机密,但如果这类 API 密钥是用于授予对手动启用 Google Cloud API 的访问权限时,则应采取一些额外的预防措施。

如果您使用的 Google Cloud API(在任何平台上)不是由 Firebase 自动启用(即由您自行启用),则应考虑创建单独的受限 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 文档

常见问题解答