Firebase 实时数据库权限被拒绝,什么是身份验证?

Firebase Realtime Database permission denied, what is auth?

提问人:Andrey Solovyov 提问时间:10/7/2023 最后编辑:Doug StevensonAndrey Solovyov 更新时间:10/7/2023 访问量:43

问:

TL;DR:AppAttest/DeviceCheck 在规则中是否算作“身份验证”?

我有一个 Swift iOS 应用程序,它将其日志存储到 Google 实时数据库,但我无法向数据库发送任何数据,并出现“权限被拒绝”错误。我的目标是确保只有我的应用程序才能在其中写入日志,并防止攻击者用随机数据淹没数据库。我认为 AppAttest/DeviceCheck 可以帮助我。

因此,我配置了 AppAttest/Device 检查,它可以正常工作。当我的应用程序启动时,我在调试器中看到它成功地向 Google 传递了 DeviceCheck。在里面,变成和我收到填充但设置为 .FPersistentConnectionconnectionStateConnectionStateConnectedFIRDatabaseConnectionContext_appCheckToken_authTokennil

我的数据库规则如下所示:

{
  "rules" : {
    ".read" : "false",
    ".write" : "auth != null"
  }
}

我的问题是:我是否需要该选项,因为我强制执行了 DeviceCheck,也许就足够了?我的应用程序既不关心角色管理,也不向 Google 进行身份验证(它只是将日志转储成一大堆),所以也许“身份验证”是多余的?auth != null".write" : "true"

归根结底,什么是“身份验证”?AppAttest/DeviceCheck 是否算作“身份验证”?

PS:当我设置时,一切都像魅力一样工作。".write" : "true"

swift firebase-realtime-database firebase-app-check

评论

1赞 Frank van Puffelen 10/7/2023
如果对项目强制实施 App Check,则没有有效 App Check 令牌的操作将在达到安全规则之前被拒绝。如果您的安全规则被触发,请假定请求附带了有效的 App Check 令牌,或者未强制执行 App Check。--- 但正如 Doug 在下面所说,App Check 并不能替代在数据库上设置适当的安全规则。

答:

2赞 Doug Stevenson 10/7/2023 #1

我是否需要 auth != null 选项,因为我强制执行了 DeviceCheck,也许 “.write” : “true” 就足够了?

App Check 和 Authentication 是完全不同的东西。一个不能替代另一个。App Check 不是 100% 保证确保只有您的应用访问某些资源的方法。从文档中:

App Check 依靠其认证提供商的实力来确定应用或设备的真实性。它可以防止一些(但不是全部)针对您的后端的滥用媒介。使用 App Check 并不能保证消除所有滥用行为,但通过与 App Check 集成,您正在朝着后端资源的滥用保护迈出重要一步。

但是,对用户身份验证的检查可以保证只有实际经过身份验证的用户帐户(或具有用户有效身份验证令牌的人员)才能实际访问资源。但是,令牌的持有者无需使用应用即可访问资源。

你不能用一个代替另一个。为了获得最佳安全性,您应该同时使用它们,尤其是使用带有身份验证的安全规则,以正确地允许个人访问他们应该能够读取和写入的数据。