You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中Firebase Admin Auth为何无法使用ADC(应用默认凭据)?

为什么Firebase Admin Auth无法使用应用默认凭据(ADC)?

这个问题的核心原因在于:Firebase Admin Auth依赖的Identity Toolkit API不支持通过gcloud SDK/Cloud Shell的终端用户凭据进行认证,而Firestore、Storage等其他Firebase服务则允许使用这类终端用户凭据。这就是为什么你其他功能能正常用ADC,但Auth不行的关键差异。

具体解决方案:

1. 直接使用服务账号凭据初始化SDK

你可以下载项目的服务账号JSON文件,在初始化Admin SDK时显式传入,而不是依赖ADC自动获取:

import * as admin from 'firebase-admin';
import serviceAccount from './path-to-your-service-account.json' assert { type: 'json' };

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount)
});

当然你原来设置GOOGLE_APPLICATION_CREDENTIALS环境变量指向这个JSON文件的方式也是有效的,本质都是让SDK使用服务账号身份。

2. 使用服务账号模拟(无需本地保存JSON文件)

如果你不想在本地保存服务账号文件,可以通过gcloud配置模拟服务账号身份,这样ADC会自动使用这个模拟的服务账号:

gcloud config set auth/impersonate_service_account your-service-account-email@your-project.iam.gserviceaccount.com

之后再运行你的代码,Auth功能就能通过ADC正常工作了。

3. 配置配额/计费项目(辅助步骤)

针对错误提示里提到的内容,你可以先配置gcloud的配额项目,确保请求关联到正确的项目:

gcloud config set billing/quota_project your-project-id

不过这一步更多是辅助,核心还是要解决身份认证的问题(用服务账号而非终端用户凭据)。

补充说明:

其他Firebase服务(比如Firestore)支持终端用户凭据,是因为它们的底层GCP API允许这种认证方式,但Identity Toolkit API出于安全和权限管控的考虑,限制了仅支持服务账号或特定认证方式,所以才会出现你遇到的差异。

内容的提问来源于stack exchange,提问作者GaryO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 06:43:12