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

Firebase Functions中enforceAppCheck:true不生效问题求助

Firebase App Check在Callable云函数中未生效的问题排查与解决

问题描述

使用Firebase Functions搭建系统时,为防范暴力攻击引入了App Check安全机制,已按官方文档完成配置,云函数代码如下:

exports.test= functions.runWith({timeoutSeconds: 30,memory: '128MB',enforceAppCheck: true}).https.onCall(async (data, context) => {
    console.log(JSON.stringify(data));
    console.log(JSON.stringify(context));
});

但App Check机制未生效:无需任何验证头,直接通过Postman等工具向函数URL发送以下请求即可成功访问:

{
    "data" : { "foo" : {}, "bar" : "bar"}
}

查看函数日志发现,日志显示"Callable request verification passed",但verifications.app为"MISSING",context.app也为null,疑惑为何enforceAppCheck:true未拦截无验证请求,担心云函数面临暴力破解风险。

可能的原因

  • 项目级App Check强制执行未开启:即便单个云函数设置了enforceAppCheck: true,如果Firebase项目层面没开启App Check的全局强制执行策略,云函数不会严格拦截无验证请求。
  • 云函数配置未更新部署:修改enforceAppCheck参数后,未重新部署云函数,导致旧配置仍在运行。
  • 本地模拟器豁免验证:如果在本地使用Firebase模拟器测试,App Check的强制执行会被自动豁免,方便开发调试。
  • App Check提供者配置不完整:基础配置完成后,未正确配置验证提供者(如ReCAPTCHA v3、Apple App Attest等),导致验证逻辑未正常触发。

解决方案

  • 开启项目级App Check强制执行
    进入Firebase控制台对应项目,依次进入App Check -> API -> Cloud Functions,确认"强制执行App Check"开关已开启。开启后,所有标记enforceAppCheck: true的云函数会严格验证App Check令牌。

  • 重新部署云函数
    修改配置后必须重新部署才能生效,执行以下命令部署目标云函数:

    firebase deploy --only functions:test
    
  • 切换到生产环境测试
    本地模拟器默认禁用App Check强制执行,部署到生产环境后,再用Postman测试无验证请求是否会被拦截。

  • 完善App Check提供者配置
    检查对应应用的验证提供者配置是否完成:

    • Web应用:确认ReCAPTCHA密钥配置正确,前端已集成App Check并能获取令牌。
    • 移动应用:确认Apple App Attest或Play Integrity配置完成,前端可正常获取有效令牌。
      只有提供者配置正确,云函数才能识别无效或缺失的令牌并拦截请求。
  • 辅助检查请求格式
    Callable函数要求请求头包含Content-Type: application/json,虽然这不是无验证请求被放行的核心原因,但可作为辅助检查项确认请求格式合规。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 18:02:51