同一账号登录多Firebase Cloud Firestore项目遇权限问题求助
我采用Google身份提供商登录Firebase项目,期望通过同一身份提供商项目实现多Cloud Firestore登录,让用户可使用生产环境账号登录测试环境。参考相关方案后仍报错:"This operation is restricted to administrators only"。当前代码及测试环境OIDC配置如下,请问我遗漏了哪些配置或步骤?
DB / Firebase 初始化代码
constructor() { this.app = firebase.initializeApp(environment.firebase); this.database = firebase.initializeApp(environment.database, 'secondary'); }
DB 认证代码
private async initializeDb(firebaseUser) { const token = await firebaseUser.getIdToken(); const provider = new firebase.auth.OAuthProvider('oidc.prod-login'); const credential = provider.credential({ idToken: token }); await this.firebaseService.database.auth().signInWithCredential(credential); return firebaseUser; }
测试环境OIDC配置
- name: prod-login
- client ID: main-firebase-project-id
- issuer: https://securetoken.google.com/main-firebase-project-id
你遇到的错误源于测试环境Firebase项目的OIDC配置权限不足、跨项目Token验证规则不匹配等问题,以下是需要补充的关键配置和步骤:
生产环境配置测试环境为授权受众
在生产环境Firebase控制台进入Authentication > 设置 > 授权域,添加测试环境项目的域名(格式:项目ID.firebaseapp.com)作为授权受众。同时在生产环境的ID Token验证设置中,允许测试环境客户端使用生产环境的ID Token完成认证。解除测试环境OIDC提供商的管理员限制
在测试环境Firebase控制台进入Authentication > 登录方法 > OIDC,找到配置的prod-login提供商,确认勾选允许用户使用此提供商登录,且未设置仅管理员可访问的限制。若需要客户端密钥,需确保密钥配置正确。匹配ID Token的受众验证规则
生产环境生成的ID Token的aud字段是生产环境项目ID,测试环境默认会验证aud是否等于自身项目ID,导致验证失败。你需要:- 要么在测试环境Firebase Auth的自定义规则中,允许
aud为生产环境项目ID的Token通过验证; - 要么在生产环境生成Token时,通过
getIdToken(true)或自定义Token生成逻辑指定测试环境为受众。
- 要么在测试环境Firebase Auth的自定义规则中,允许
配置跨项目认证的IAM权限
在生产环境IAM控制台中,为测试环境的Firebase服务账号添加Firebase Auth Token Verifier角色,确保测试环境具备验证生产环境ID Token的权限。确认代码中Auth实例的正确性
检查this.firebaseService.database.auth()是否确实指向secondary(测试环境)App对应的Auth实例,避免因实例混淆导致的权限校验错误。
内容的提问来源于stack exchange,提问作者dom

