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 会自动为您的项目创建 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.plist API_KEY
字段中查找应用程序的自动匹配 API 密钥。Firebase Android 应用程序— 在 Firebase 配置文件
的google-services.json current_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 服务的使用。
这些说明描述了如何为名为Super Service API
的虚假API 创建单独的受限 API 密钥。
第 1 步:配置您现有的 API 密钥以禁止访问Super Service API
打开 Google Cloud Console 的凭据页面。出现提示时,选择您的项目。
对于列表中的每个现有 API 密钥,打开编辑视图。
在API 限制部分,选择Restrict key ,然后将您希望 API 密钥有权访问的所有 API 添加到列表中。确保不包含您为其创建单独 API 密钥的 API(在本例中为
Super Service API
)。当您配置 API 密钥的API 限制时,您明确声明了该密钥可以访问的 API。默认情况下,当API 限制部分选择了不限制密钥时,API 密钥可用于访问为项目启用的任何 API。
现在,您现有的 API 密钥将不会授予对Super Service API
的访问权限,但每个密钥将继续适用于您添加到其API 限制列表中的任何 API。
第 2 步:创建并使用新的 API 密钥来访问Super Service API
返回凭证页面。确保您的 Firebase 项目仍处于选中状态。
单击创建凭据 > API 密钥。记下新的 API 密钥,然后单击限制密钥。
在API 限制部分,选择Restrict key ,然后仅将
Super Service API
添加到列表中。这个新的 API 密钥仅授予对
Super Service API
的访问权限。配置您的应用和服务以使用新的 API 密钥。
使用特定于环境的 API 密钥(推荐)
如果您为不同的环境(例如登台和生产)设置不同的 Firebase 项目,则每个应用实例与其对应的 Firebase 项目进行交互非常重要。例如,您的暂存应用程序实例永远不应与您的生产 Firebase 项目通信。这也意味着您的临时应用程序需要使用与临时 Firebase 项目关联的 API 密钥。
为了减少从开发到暂存再到生产的代码更改问题,而不是将 API 密钥包含在代码本身中,将它们设置为环境变量或将它们包含在配置文件中。
请注意,如果您将 Firebase Local Emulator Suite 与 Firebase ML 一起用于开发,则必须创建并使用仅用于调试的 API 密钥。 Firebase ML 文档中提供了创建此类密钥的说明。
常见问题
您可以使用以下任何选项来确定与您的 Firebase 应用关联的 API 密钥:
Firebase 控制台
转到项目设置,然后向下滚动到您的应用卡。
选择感兴趣的应用程序。
获取感兴趣的应用程序的 Firebase 配置文件/对象,然后找到其 API 密钥:
Apple :下载
GoogleService-Info.plist
,然后找到API_KEY
字段Android :下载
google-services.json
,找到感兴趣的应用程序的配置(查找它的包名),然后找到current_key
字段Web :选择Config选项,然后找到
apiKey
字段
Firebase 命令行界面
通过运行以下命令获取感兴趣的应用程序的 Firebase 配置文件/对象:
firebase apps:sdkconfig PLATFORM FIREBASE_APP_ID
- PLATFORM (之一):
IOS
|ANDROID
|WEB
- FIREBASE_APP_ID :Firebase 为您的 Firebase 应用分配的唯一标识符(查找您的应用 ID )
- PLATFORM (之一):
在应用打印的 Firebase 配置中,找到其 API 密钥:
苹果:找到
API_KEY
字段Android : 找到感兴趣的应用程序的配置(查找它的包名),然后找到
current_key
字段Web : 找到
apiKey
字段
REST API
通过调用感兴趣的应用程序的适用端点获取 API 密钥的
apiKeyId
(UID),然后将apiKeyId
值传递给下一步。- 苹果:调用
projects.iosApps.get
- Android : 调用
projects.androidApps.get
- 网络:调用
projects.webApps.get
- 苹果:调用
通过调用
projects.locations.keys.getKeyString
获取 API 密钥字符串。
Firebase Apple 应用程序——每个应用程序都有自己的配置文件,并且只能列出一个 API 密钥。
Firebase Android 应用程序——Firebase 项目中的所有 Android 应用程序都列在同一个配置文件中,并且每个应用程序只能列出一个 API 密钥。但是,此配置文件中的每个应用程序都可以列出不同的键。
Firebase Web 应用程序——每个应用程序都有自己的配置对象,并且只能列出一个 API 密钥。
不过,您可以在一个应用程序中使用多个 API 密钥。您必须为您的应用提供访问这些其他 API 密钥的机制,例如通过环境变量。访问其他 API 密钥的机制不能依赖于 Firebase 配置文件/对象中列出的那些 API 密钥。
当您首次获取应用的 Firebase 配置文件/对象时,Firebase 会检查您的项目中是否有任何现有 API 密钥具有与应用匹配的“应用程序限制” (例如,Apple 应用的匹配包 ID)。
如果 Firebase 没有找到任何匹配的受限密钥,那么它将在配置文件/对象中列出 Apple 应用的iOS key
、Android 应用的Android key
和 Web 应用的Browser key
(假设这些密钥存在并且没有阻止它们与该应用程序匹配的“应用程序限制”)。
是的,您可以从配置文件/对象中手动删除 API 密钥。但是,您必须为您的应用程序提供一些其他机制来访问 API 密钥(例如通过环境变量)。否则,对 Firebase 服务的任何调用都会失败。
是的,您可以手动编辑配置文件/对象以将不同的 API 密钥与应用程序相关联。
请注意,如果您从控制台重新获取应用的配置文件/对象,它将始终列出Firebase 自动与该应用匹配的 API 密钥。因此,您需要根据需要重复手动编辑。
不可以,API 密钥仅标识特定项目,不能移动到另一个项目。
以下是导致 API 密钥无效的一些最常见原因:
API 密钥应用了“API 密钥限制” ,使其无法与尝试使用该密钥的应用程序(“应用程序限制”)或被调用的 API (“API 限制”)不匹配。
API 密钥已从 Google Cloud Console 中的项目中删除。
未为应用的 Firebase 配置文件/对象中列出的项目 ID 创建 API 密钥。
解决此问题的一种方法是获取应用的 Firebase 配置文件/对象的更新版本,然后将旧配置文件/对象替换为新的更新文件/对象。在发送配置文件以供下载或在控制台中显示配置对象之前,Firebase 会检查列出的 API 密钥是否与应用程序匹配。
您的 Web 应用程序使用的 API 密钥可能应用了“API 限制” 。如果是这种情况,请确保 Firebase Management API 在允许的 API 列表中。
如果您删除某个应用正在使用的 API 密钥,则来自该应用的 API 调用将失败。您可能会收到有关您尝试使用无效 API 密钥的报告、电子邮件或错误。
删除 API 密钥是永久性的,无法撤消。