Firebase AppCheck for Firebase 身份验证

Posted

技术标签:

【中文标题】Firebase AppCheck for Firebase 身份验证【英文标题】:Firebase AppCheck for Firebase Auth 【发布时间】:2022-01-01 00:27:57 【问题描述】:

Firebase 身份验证为 create/delete/edit 身份验证用户提供 REST API。由于 API 密钥不是私有的,因此任何人都可以使用该 API。

端点,例如创建新用户是公开可用的,不能禁用 AFAIK。

在我看来这是一个糟糕的情况,例如攻击者可以通过此端点创建大量用户,这些用户对我们的系统来说不是有效用户。攻击者可以阻止无法创建有效帐户的客户的有效电子邮件地址。

如果攻击者知道用户 ID,他甚至可以删除授权用户。

我们添加了用户声明(只能通过 Admin API 而不能通过公共 API 设置)以确保只有我们创建的用户才能访问我们的系统,但这意味着我们需要付出很多努力才能定期删除不是通过我们的系统创建的用户。

是否计划通过AppCheck 保护 FirebaseAuth 以仅允许经过验证的应用访问 auth api?

【问题讨论】:

"如果攻击者知道用户 ID,他甚至可以删除授权用户。"要删除用户帐户,您需要输入该用户的凭据,或者对项目具有管理访问权限。知道他们的 UID 还不够好。另见:***.com/questions/37221760/… 【参考方案1】: 推荐的答案 Google Cloud

在这一点上,我认为这不太可能,因为与应用检查所保护的 API 相比,这种滥用被认为风险较低。

面向公众的 Firebase 身份验证 API 是 rate-limited,特别是 Web API 必须来自您允许的身份验证域。但是,该平台的主要卖点之一是能够处理许多并发用户。

可以创建 100 个帐户/IP 地址/小时 每秒可删除10个帐号 可以为整个项目的公共 API 处理 1000 个请求/秒、1000 万个请求/天

使用 Admin SDK 可以绕过每个 IP 地址的限制(受限于 500 个请求/秒的限制)。如果您预计需求会激增(例如,您提供黑色星期五促销),您也可以从 Firebase 控制台暂时提高这些限制。

只有用于创建用户的 Firebase Auth API 是“公开的”,但如上所述受到限制。

编辑、删除、更新用户的详细信息,元数据和帐户本身都是特权操作 - 您必须经过适当的身份验证才能进行更改。对于从客户端设备连接的用户帐户,您必须在大约 5 分钟内登录才能更新/删除您的自己的帐户。使用 Admin SDK 时,请求使用服务帐户的凭据进行身份验证,该凭据授权它代表用户或系统进行更改。

如果您的系统以这种方式被滥用,请联系 Firebase 支持人员。

【讨论】:

很好的回答山姆! ?? 好的,谢谢你的详细解释。但是我的有效用户仍然可以通过 REST-Api 删除他们自己的身份验证帐户。那是对的吗?似乎不太可能,但他们可以使自己的帐户无法正常工作。我仍然觉得 API 是公开可用的很奇怪。 @Bob 如果用户想删除自己的帐户,则应允许他们删除自己的帐户。如果用户必须学习 REST API 只是为了删除他们的帐户,那是非常糟糕的用户体验——你的应用程序应该有一些 UI 来简化它——即使它只是向你发送一封电子邮件,请求删除帐户。此外,Firebase 是一个无服务器优先平台,如果没有可与之交互的后端服务器,公共 API 将是他们创建/更新/删除其帐户的唯一选择。 是的,我同意,如果他们愿意,应该允许人们删除他们的帐户。问题是,如果他们要删除 Auth 帐户,其他数据,例如在 firestore 上没有正确处理。这就是为什么我想禁止直接通过 REST Api 删除身份验证用户并只允许通过我们的 app/api 进行删除。

以上是关于Firebase AppCheck for Firebase 身份验证的主要内容,如果未能解决你的问题,请参考以下文章

Firebase Functions AppCheck 不断让我的设备失败

Swift 2.3 pod 更新后使用未解析的标识符 Firebase 'FIR'

无法使用 App Check 为 Firebase 存储生成调试令牌

Flutter 中来自 Firebase 的应用检查不起作用

应用检查对 Firebase 可调用函数的不必要强制执行

firebase - 从可调用云函数访问数据库时应用检查失败