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

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

有关 API 密钥和 Firebase 的常规信息

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

与 API 密钥的典型用法不同,Firebase 服务的 API 密钥不能用来控制对后端资源的访问权限;此项控制只能通过 Firebase Security Rules(用于控制哪些最终用户可以访问资源)和 Firebase App Check(用于控制哪些应用可以访问资源)来实现。

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

尽管 Firebase 服务的 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

当您的应用调用需要移动/Web 客户端提供的 API 密钥的 Firebase API 时,会在 Firebase 配置文件/对象中自动查找项目的 API 密钥。不过,您也可以使用环境变量等其他机制为您的应用提供 API 密钥。

查看限制并对 API 密钥施加适当的限制(推荐)

虽然没有必要将 Firebase 服务的 API 密钥视为机密,但您应该查看并应用本部分中所述的限制。

查看系统自动添加到 Firebase API 密钥许可名单的 API

当 Firebase 在您的项目中创建 API 密钥时,我们会自动为该密钥添加“API 限制”添加到此许可名单中的 API 是 Firebase 相关 API,这些 API 要求客户端在调用时提供 API 密钥。请注意,使用 Firebase 服务所需的大多数 API 实际上不需要列入 API 密钥的许可名单。

由于 Firebase 会为所有 Firebase 服务添加必要的 API,因此 API 密钥的许可名单可能包含您未使用的 API。您可以从许可名单中移除 API,但必须非常小心,不要移除 Firebase 和您使用的 Firebase 服务所需的 API(请参阅每个服务/产品需要在许可名单中的 Firebase 相关 API 列表)。否则,您在调用 Firebase 服务时会遇到错误。

使用基于密码的 Authentication 时收紧配额

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

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

为任何非 Firebase 服务使用单独的受限 API 密钥

虽然用于 Firebase 服务的 API 密钥一般不需要视为机密,但如果这类 API 密钥是用于其他 Google Cloud 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 SuiteFirebase ML 进行开发,则必须创建并使用仅用于调试的 API 密钥。如需了解如何创建此类密钥,请参阅 Firebase ML 文档

常见问题解答和问题排查

常见问题解答

问题排查