启用App Check后Firebase云函数仍可公开访问,该如何修复?
修复Firebase云函数App Check不生效的问题
下面是针对你的问题的具体修复步骤:
在Firebase控制台启用云函数的App Check强制验证
仅在代码中设置enforceAppCheck: true无法生效,必须同步在控制台开启对应函数的验证:- 打开Firebase控制台,进入你的项目
- 点击「Build」→「Cloud Functions」
- 在函数列表中找到
getData,进入函数详情页 - 找到「App Check」设置项,开启「强制使用App Check验证请求」
确保Flutter客户端正确集成并发送App Check Token
云函数的验证依赖客户端携带有效的App Check Token,需要确认你的Flutter应用完成了以下配置:- 集成
firebase_app_check依赖并初始化,根据平台选择对应的验证提供者(Android用Play Integrity,iOS用App Attest或DeviceCheck):await FirebaseAppCheck.instance.activate( androidProvider: AndroidProvider.playIntegrity, appleProvider: AppleProvider.appAttest, ); - 调用云函数时,确保Token被正确携带:
- 如果使用
firebase_functions包的HttpsCallable,它会自动添加X-Firebase-AppCheck请求头 - 如果手动发送HTTP请求,需要手动添加请求头:
final appCheckToken = await FirebaseAppCheck.instance.getToken(); final response = await http.get( Uri.parse('https://<你的区域>-<你的项目ID>.cloudfunctions.net/getData'), headers: {'X-Firebase-AppCheck': appCheckToken!.token}, );
- 如果使用
- 集成
重新部署云函数
修改代码后,必须重新部署才能让enforceAppCheck配置生效:firebase deploy --only functions:getData排查权限豁免与本地测试场景
如果你的测试IP被加入了云函数的「权限豁免」列表,或者使用Firebase Emulator进行测试,App Check验证会被跳过。确认生产环境的请求没有被豁免,且未使用模拟器访问线上函数。
内容的提问来源于stack exchange,提问作者Patola
相关产品推荐
相关产品推荐

