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

使用Python Firebase Admin验证Google登录Token时签名验证失败

问题诊断与解决方案

核心问题定位

你遇到的Google登录Token验证失败,根源大概率是获取的Token并非Firebase签发的ID Token,而是Google原生的ID Token,导致Firebase Admin无法验证其签名。以下是具体排查和修复步骤:


修复步骤

1. 修正Flutter端Google登录流程,获取Firebase ID Token

Flutter中直接从Google Sign-In拿到的idToken是Google自身的凭证,必须通过Firebase Auth转换为Firebase签发的Token,后端才能正常验证。

替换你的Google登录代码为如下逻辑:

// 执行Google登录
final GoogleSignInAccount? googleUser = await GoogleSignIn().signIn();
final GoogleSignInAuthentication googleAuth = await googleUser!.authentication;

// 将Google凭证转为Firebase OAuth凭证
final OAuthCredential credential = GoogleAuthProvider.credential(
  accessToken: googleAuth.accessToken,
  idToken: googleAuth.idToken,
);

// 登录Firebase并获取Firebase官方ID Token
final UserCredential userCredential = await FirebaseAuth.instance.signInWithCredential(credential);
final String? firebaseIdToken = await userCredential.user!.getIdToken();

// 后续将firebaseIdToken传给后端,而非googleAuth.idToken

2. 检查后端Firebase Admin初始化配置

确保FastAPI服务中Firebase Admin使用的服务账号密钥与Flutter项目完全匹配:

  • 重新下载Firebase控制台的服务账号JSON文件(项目设置 > 服务账号 > 生成新的私钥)
  • 确认JSON文件中的project_id与Flutter端google-services.json里的项目ID完全一致
  • 重启后端服务,避免旧配置缓存

3. 简化后端Token验证逻辑

不要手动指定验证参数,让Firebase Admin自动读取服务账号配置中的项目信息:

from firebase_admin import auth
from fastapi import HTTPException

def verify_firebase_token(id_token: str):
    try:
        decoded_token = auth.verify_id_token(id_token)
        return decoded_token
    except auth.InvalidIdTokenError:
        raise HTTPException(status_code=401, detail="无效的Token")
    except auth.ExpiredIdTokenError:
        raise HTTPException(status_code=401, detail="Token已过期")

4. 额外验证手段

  • 用Firebase控制台的Token验证工具(Authentication > 用户列表 > 右上角三点 > 验证ID Token)分别校验两种登录方式的Token,确认Google登录转换后的Token能被官方工具通过
  • 对比两种Token的iss字段:正常的Firebase Tokeniss值应为https://securetoken.google.com/[你的项目ID],两种登录方式的Token该字段必须一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 12:12:07