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

Firebase AppCheck令牌验证失败:‘aud’声明错误求助

Firebase AppCheck令牌验证aud字段不匹配问题解决

问题原因

你混淆了Firebase Auth ID Token和App Check令牌的格式规则:

  • Auth ID Token的aud字段是纯项目ID
  • App Check令牌的aud字段默认是包含projects/[项目编号]和projects/[项目ID]的逗号分隔字符串,这是App Check令牌的标准设计。
    你的后端误用了验证Auth ID Token的逻辑来校验App Check令牌,因此出现字段不匹配的错误。

解决方法

1. 改用App Check专属验证方法(推荐)

后端不要使用验证Auth令牌的verifyIdToken方法,换成对应语言Admin SDK的App Check验证方法:

  • Node.js示例:
    const { initializeApp } = require('firebase-admin/app');
    const { getAppCheck } = require('firebase-admin/app-check');
    
    const app = initializeApp();
    const appCheck = getAppCheck(app);
    
    // 验证App Check令牌
    async function validateAppCheckToken(token) {
      try {
        const result = await appCheck.verifyToken(token);
        return result;
      } catch (error) {
        console.error('App Check验证失败:', error);
        throw error;
      }
    }
    

这个方法会自动处理aud字段的格式,无需手动校验。

2. 调整后端校验逻辑(临时方案)

如果暂时无法切换验证方法,可修改后端的aud校验逻辑:

  • 检查令牌的aud值是否包含projects/你的项目ID(比如projects/myprojectid)
  • 或者拆分逗号分隔的字符串,确认其中存在目标项目标识

3. 确认客户端传对令牌

确保Flutter客户端获取并传递的是App Check令牌:

import 'package:firebase_app_check/firebase_app_check.dart';

// 获取App Check令牌
final token = await FirebaseAppCheck.instance.getToken();
// 将token?.token发送到后端

避免误把Auth的ID Token传到后端做App Check验证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 18:22:15