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

Firebase App Check调试令牌无效,调用Cloud Function端点遇未授权问题

问题分析与修复方案

首先,你收到的错误提示翻译为:

解码App Check令牌失败。请确保你传入了代表Firebase App Check令牌的完整JWT字符串

以下是针对性的排查和修复步骤:

1. 检查请求头的令牌格式

最常见的触发原因是iOS端传递的X-Firebase-AppCheck头包含多余前缀(比如Bearer )。Firebase App Check令牌是纯JWT字符串,不需要添加Bearer前缀。

  • 确认iOS端代码中,直接使用App Check令牌值设置请求头,而非拼接Bearer 前缀。
  • 可以在Cloud Functions中临时添加日志,验证收到的令牌格式:
    const appCheckVerification = async (req, res, next) => {
      const token = req.header("X-Firebase-AppCheck");
      console.log("Received App Check token:", token); // 打印令牌排查格式问题
      const appCheckClaims = await verifyAppCheckToken(token);
      // 后续逻辑不变
    };
    

2. 修复令牌验证函数的逻辑

当前代码存在两个问题:一是未显式等待verifyToken异步操作完成,二是错误捕获后直接返回null无法定位具体问题。修改后的函数如下:

const verifyAppCheckToken = async (appCheckToken) => {
  if (!appCheckToken) {
    console.log("No App Check token provided");
    return null;
  }
  try {
    // 显式await异步验证操作,返回完整验证结果
    const verificationResult = await appCheck.getAppCheck().verifyToken(appCheckToken);
    return verificationResult;
  } catch (err) {
    // 打印错误详情,方便排查
    console.error("App Check token verification failed:", err.message);
    return null;
  }
};

3. 确认调试令牌配置有效性

  • 检查Firebase控制台中,对应iOS应用的App Check设置里,已添加模拟器生成的调试令牌,且令牌状态为启用。
  • 确认调试令牌未被手动禁用(调试令牌默认长期有效)。

4. 验证iOS端令牌获取逻辑

确保iOS端正确提取纯JWT字符串,示例Swift代码参考:

import FirebaseAppCheck

// 获取并使用App Check令牌
AppCheck.shared.token { token, error in
  guard let token = token else {
    print("App Check令牌获取失败: \(error?.localizedDescription ?? "未知错误")")
    return
  }
  // 使用token.token获取纯JWT字符串设置请求头
  var request = URLRequest(url: URL(string: "你的Cloud Function端点")!)
  request.setValue(token.token, forHTTPHeaderField: "X-Firebase-AppCheck")
  // 发送请求逻辑
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 15:22:59