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

启用Firebase App Check后仍无法阻止外部调用云函数的排查方法

排查Firebase App Check对Express Cloud Functions不生效的问题

以下是针对你的情况的具体排查步骤:

1. 核心误区:enforceAppCheck: true 对 https.onRequest 函数不自动生效

你使用的是基于Express的https.onRequest函数,但Firebase的enforceAppCheck: true配置仅对Callable Functions(https.onCall)自动生效。对于onRequest类型的HTTP函数,必须手动添加App Check令牌验证逻辑,否则设置的enforceAppCheck参数不会起任何作用。

解决方法:在Express应用中添加App Check验证中间件,示例代码如下:

const admin = require('firebase-admin');
admin.initializeApp();

// 定义App Check验证中间件
const verifyAppCheck = async (req, res, next) => {
  const appCheckToken = req.headers['x-firebase-appcheck'];
  
  if (!appCheckToken) {
    return res.status(401).send('Missing App Check token');
  }

  try {
    // 验证令牌
    const claims = await admin.appCheck().verifyToken(appCheckToken);
    req.appCheckClaims = claims;
    next();
  } catch (error) {
    return res.status(403).send('Invalid or expired App Check token');
  }
};

// 给需要保护的路由挂载中间件
app.use('/your-protected-endpoints', verifyAppCheck);

2. 检查Firebase项目的App Check全局配置

  • 进入Firebase控制台的「App Check」页面,找到「Cloud Functions」服务条目,确认其验证状态为强制验证(而非「允许未验证的请求」或调试模式)。
  • 若当前处于开发调试模式,App Check会放宽验证限制,导致外部请求可直接访问。需切换至生产模式,确保仅携带有效令牌的请求能通过。

3. 确认是否存在调试令牌或IP豁免

  • 检查App Check控制台的「调试」标签页,是否添加了全局调试令牌。若存在,携带该令牌的任何请求(包括curl)都会被允许访问。
  • 查看是否设置了IP豁免列表,若你的桌面IP在豁免范围内,curl请求会直接绕过验证。

4. 验证iOS端是否正确发送App Check令牌

虽然应用内调用正常,但需确认iOS端是否将App Check令牌附加到请求头中:

  • 抓包查看应用请求的X-Firebase-AppCheck头是否存在且有效。
  • iOS端调用Cloud Functions时,需手动获取令牌并添加到请求头,示例代码:
import FirebaseAppCheck

// 获取App Check令牌
guard let appCheckToken = try? await FirebaseAppCheck.appCheck().token(forcingRefresh: false)?.token else {
    // 处理令牌获取失败
    return
}

// 构建请求并添加令牌头
var request = URLRequest(url: URL(string: "YOUR_FUNCTION_URL")!)
request.setValue(appCheckToken, forHTTPHeaderField: "X-Firebase-AppCheck")

// 发送请求
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    // 处理响应
}
task.resume()

5. 确认函数部署状态

  • 确保添加了验证逻辑的函数已重新部署成功,可通过firebase deploy --only functions重新部署。
  • 用firebase functions:log --function myfunc查看函数的部署日志,确认没有部署错误,且运行的是最新版本。

6. 查看函数日志细节

  • 不要找「callable-request-verification」日志,该日志仅针对Callable Functions。
  • 查看myfunc函数的具体请求日志,检查验证中间件是否被触发,是否有令牌验证失败的记录,以此确认验证逻辑是否正常执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 02:27:48