【问题标题】:authentication with firebase Realtime Database without user在没有用户的情况下使用 firebase 实时数据库进行身份验证
【发布时间】:2021-11-16 02:23:54
【问题描述】:

我有一个可以对所有人进行读/写的 firebase 实时数据库,但是我没有任何用户,也不打算对用户进行身份验证。数据由事件侦听器和调度程序(java)写入,我的 html ui 应用程序应该只读取数据。

我应该如何保护我的数据库?

在开发(不安全)模式下,我可以使用任何 http 客户端写入/读取数据吗?安全后如何通过身份验证?

【问题讨论】:

  • 这完全取决于您要保护的内容。与其说你不想要什么(用户登录),你能告诉我们你想要保护数据免受什么影响吗?
  • 我想限制 html ui 应用程序的只读权限,并限制我的后端应用程序的写入权限。我可以设置静态访问令牌吗?

标签: firebase authentication firebase-realtime-database firebase-authentication


【解决方案1】:

要只允许您的网站读取,而只允许您的后端写入,您需要将安全规则与 Firebase 应用检查相结合。

安全规则

首先在安全规则中,你会做:

{
  "rules": {
    ".read": true,
    ".write": false
  }
}

这使每个人都可以读取您的整个数据库(我们稍后会将其限制为您的应用程序),并且不允许任何拥有客户端 SDK 的人对其进行写入。

我强烈建议在规则中添加一些额外的逻辑来限制人们读取数据的方式。例如,如果您的代码首先读取用户列表,然后显示来自选定用户的帖子,请修改您的规则以仅允许该特定路径,并拒绝其他任何内容。

应用检查

现在规则已经到位,您将希望开始使用 App Check 来减少人们获取您的配置数据并自行调用 API 的滥用行为。

App Check 不能保证这种情况不会再发生(尤其是在网络上),但它肯定会增加恶意用户必须做的工作。

【讨论】:

  • 那我该如何更新数据呢?使用 .write 错误。我正在使用 curl 来调用更新。
  • 啊,我认为“来自我的后端应用程序”是指通过我们的 Admin SDK 之一。如果您的平台有这样的 SDK,我建议使用它,因为它们以绕过安全规则的提升权限运行。如果没有这样的 SDK,您可以使用具有数据库编辑权限的协作者的 OAuth2 令牌(在控制台中)写入数据,或者您可以在后端登录 Firebase 身份验证,然后对 UID 进行硬编码该用户在规则中:".write": "auth.uid === 'uidOfYourServerUser'"
  • 有这方面的文件吗?我尝试从管理 SDK 生成自定义令牌,但是在使用它时我得到 401。尝试将其添加到 http 标头 Authorization Bearer 令牌,但没有成功。
  • 另外,我可以通过 admin sdk 更新数据吗?也没有找到相关文件。
猜你喜欢
  • 2020-01-10
  • 2018-11-09
  • 1970-01-01
  • 2021-07-14
  • 2016-08-02
  • 1970-01-01
  • 2018-10-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多