Google登录集成报错:Firebase ID Token的aud声明不匹配
解决Firebase ID Token验证时的"Audience"声明不匹配问题
错误信息
Firebase ID token的"aud"(受众)声明不正确,预期值为"test-f2978",实际得到"583659997900-tiqii1rc4mjsle349h42nq117h36fvbb.apps.googleusercontent.com"。请确保ID token与用于验证的Firebase项目一致。
问题原因
后端用Firebase Admin SDK验证的是Firebase ID Token,但当前前端获取的是Google原生OAuth ID Token:
- Firebase ID Token的
aud字段是Firebase项目ID(即错误提示里的test-f2978) - Google原生ID Token的
aud字段是Google OAuth客户端ID(即前端配置的webClientId)
两者不匹配导致验证失败。
解决方案
前端修改:获取Firebase ID Token
需要通过Firebase Auth将Google登录凭证转换为Firebase ID Token,步骤如下:
- 先初始化Firebase Auth(替换为你的项目配置):
import { initializeApp } from "firebase/app"; import { getAuth, signInWithCredential, GoogleAuthProvider } from "firebase/auth"; const firebaseConfig = { apiKey: "你的API_KEY", authDomain: "你的AUTH_DOMAIN", projectId: "test-f2978", // 必须与后端预期的aud值一致 storageBucket: "你的STORAGE_BUCKET", messagingSenderId: "你的SENDER_ID", appId: "你的APP_ID" }; const app = initializeApp(firebaseConfig); const auth = getAuth(app);
- 修改登录逻辑,转换并获取Firebase ID Token:
const handleGoogleLogin = async () => { setIsLoading(true); try { await GoogleSignin.hasPlayServices({ showPlayServicesUpdateDialog: true }); const response = await GoogleSignin.signIn(); // 将Google登录凭证转为Firebase认证凭证 const googleCredential = GoogleAuthProvider.credential(response.data.idToken); // 通过Firebase Auth完成登录 const userCredential = await signInWithCredential(auth, googleCredential); // 获取Firebase ID Token const idToken = await userCredential.user.getIdToken(); console.log("Firebase ID Token:", idToken); const authToken = await signIn(idToken); console.log(authToken); } catch (error) { console.error(error); } finally { setIsLoading(false); } };
后端配置确认
确保后端使用的firebase-admin-sdk.json属于test-f2978这个Firebase项目,项目ID需与前端firebaseConfig中的projectId完全一致。
内容的提问来源于stack exchange,提问作者Mohit Ratan
相关产品推荐
相关产品推荐

