如何为Firebase Realtime Database正确启用App Check强制验证?
遇到过类似的配置问题,给你梳理几个关键的排查和解决步骤:
先在Realtime Database安全规则中加入App Check验证逻辑
和Firestore、Storage不同,RTDB的App Check强制验证不是在App Check控制台直接开启开关,而是要通过安全规则来实现。你需要进入Firebase控制台的「Realtime Database」页面,切换到「规则」标签页,修改规则代码,给需要保护的路径添加request.app != null的校验条件。比如全局强制验证的规则可以写成:{ "rules": { ".read": "request.app != null", ".write": "request.app != null" } }这个规则会要求所有读写RTDB的请求必须携带有效的App Check令牌,未通过验证的请求会直接被拒绝。
验证客户端是否正确传递App Check令牌
不管你用的是Android、iOS还是Web客户端,要确保App Check的初始化代码正确,且RTDB的请求是在App Check激活之后发出的。比如Web端要确保调用了firebase.appCheck().activate(你的reCAPTCHA站点密钥),并开启了令牌自动刷新;Android端要在Application类中完成App Check的初始化并绑定RTDB的验证提供者。你还可以通过抓包或客户端日志确认请求头中是否存在X-Firebase-AppCheck字段——这个字段就是App Check令牌,如果缺失,说明客户端没有正确配置App Check。留意区域差异的潜在影响
你的RTDB部署在us-central1,而其他服务在southamerica-east1,不过App Check是项目级的配置,不需要单独为RTDB的区域做额外设置。只要你修改的是对应us-central1实例的安全规则,就不会有区域冲突的问题,不用过于担心这点。给控制台状态更新留一点时间
Firebase控制台的App Check状态更新有时候会有延迟,哪怕你已经配置好规则并发送了有效请求,可能需要10-15分钟才会从「Start using Realtime Database to enable App Check」更新为「Enforced」。可以先等一会儿,再刷新App Check控制台页面查看状态。确保测试请求是有效的
注意:Firebase Admin SDK发送的RTDB请求会自动绕过App Check验证,如果你用Admin SDK测试,控制台不会统计这些请求。一定要用普通客户端(比如你的App或Web页面)发送请求,并且确保请求成功通过了规则校验(没有被拒绝),这样控制台才会识别到App Check正在被正常使用。
备注:内容来源于stack exchange,提问作者Augusto M. G.

