如何生成Firebase Auth令牌用于Golang Admin SDK单元测试
Firebase Go Admin SDK 单元测试生成验证令牌的两种方案
方案1:使用Firebase Auth模拟器生成(推荐,最贴近真实场景)
这个方案不需要处理签名密钥逻辑,校验逻辑和生产环境完全一致:
- 本地启动Firebase Auth模拟器,提前设置环境变量
FIREBASE_AUTH_EMULATOR_HOST为模拟器地址(默认值为localhost:9099) - 先调用Admin SDK的
CustomToken方法生成指定UID的自定义令牌:
customToken, err := client.CustomToken(context.Background(), "test-user-uid-001") if err != nil { // 处理错误 }
- 向模拟器接口发送POST请求,把自定义令牌兑换为可直接用于校验的ID令牌,请求地址为
http://{FIREBASE_AUTH_EMULATOR_HOST}/www.googleapis.com/identitytoolkit/v3/relyingparty/verifyCustomToken?key=dummy_key,请求体为{"token":"刚生成的自定义令牌","returnSecureToken":true},返回结果中的idToken字段就是可用的测试令牌 - 此时调用
VerifyIDToken方法会自动识别模拟器环境,跳过真实公钥校验,直接向模拟器完成令牌验证,无需额外配置
方案2:本地自签名生成(无外部依赖,适合轻量单元测试)
如果不想启动模拟器,可以自行构造符合Firebase ID令牌规范的JWT用于测试:
- 构造JWT payload必须包含以下字段:
iss:固定值为https://securetoken.google.com/你的Firebase项目IDaud:值为你的Firebase项目IDsub:测试用户的UID,也就是你后续要提取的字段iat:令牌签发时间戳(Unix时间)exp:令牌过期时间戳,建议设置为签发后1小时内auth_time:用户认证时间戳,和iat一致即可
- 用RS256算法,使用你自行生成的RSA密钥对签名生成JWT
- 初始化Firebase Auth客户端时,自定义拦截公钥请求的HTTP客户端,直接返回你生成的RSA公钥,即可让
VerifyIDToken正常校验本地生成的令牌
注意:自签名方案仅限单元测试使用,严禁上线到生产环境
内容的提问来源于stack exchange,提问作者jcromanu
相关产品推荐
相关产品推荐

