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

Firebase实时数据库权限拒绝:AppAttest/DeviceCheck是否属于规则中的auth?

Firebase实时数据库规则:AppAttest/DeviceCheck与auth的关系及规则配置

核心结论

  • 规则中的auth仅指代Firebase Authentication生成的用户身份令牌,AppAttest/DeviceCheck属于Firebase AppCheck范畴,和auth是完全独立的两个验证体系,不属于auth范畴。
  • 不能直接设置.write": "true",这会完全开放数据库写入权限,极易被恶意攻击;正确做法是通过app.check()校验AppCheck令牌的有效性。

详细解释

  1. 规则里的auth是什么?
    规则中的auth变量,是Firebase Authentication验证通过后生成的用户身份标识,仅当用户通过邮箱密码、Google登录、匿名登录等Firebase Auth方式完成身份验证时,auth才会有值。你的应用没有启用Firebase Auth,所以_authToken为nil,auth != null的规则自然返回false,导致"Permission denied"。

  2. AppAttest/DeviceCheck属于auth范畴吗?
    不属于。AppAttest/DeviceCheck是Firebase AppCheck的验证方式,作用是校验请求是否来自你的合法应用;而Firebase Auth的作用是校验请求是否来自某个特定用户。两者验证维度完全不同,所以AppCheck验证通过后,auth依然会是nil(除非同时启用了Firebase Auth)。

  3. 正确的规则配置
    既然你的需求是仅允许合法应用写入日志,应该用AppCheck的校验规则替代auth相关判断,配置如下:

{
  "rules": {
    ".read": "false",
    ".write": "app.check() == true"
  }
}

这个规则会检查每个写入请求是否携带有效的AppCheck令牌,只有通过AppAttest/DeviceCheck验证的请求才能写入数据库,既满足你的需求,又避免了开放权限的风险。

  1. 为什么不能设.write": "true"?
    直接设置为true会移除所有写入限制,任何知道数据库URL的人都能往里面写入数据,恶意攻击者很容易通过脚本批量填充垃圾数据,导致数据库资源被耗尽或数据污染。

内容的提问来源于stack exchange,提问作者Andrey Solovyov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 22:47:07