【问题标题】:Firestore rules when a database is shared across multiple instances跨多个实例共享数据库时的 Firestore 规则
【发布时间】:2022-01-12 10:27:22
【问题描述】:

想象一下,1 - 静态前端客户端 和 2 - node.js 服务器 都使用 Firestore 数据库。

基本上,只允许domain 和ip address 使用该数据库,它运行良好。

棘手的部分:

  • 我们希望 node.js 服务器对整个数据库进行读/写
  • 但如果用户通过身份验证,则应仅允许 Web 客户端在同一数据库上读取/写入。

问题是rules 无法将我们的ip address 列入白名单。

所以我们尝试使用这个:

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.auth != null;
    }
  }

那么node.js服务器可以signInAnonymously,而前端客户端需要在访问任何内容之前对用户进行身份验证。

我的问题

signInAnonymously 是否足够安全? 因为anonymous auth 已打开,有人可以从我们的前端中signInAnonymously 吗? 是否有可能有人欺骗某些标头并伪装成我们的域只是为了将自己验证为匿名?

这样的案例的最佳做法是什么?

【问题讨论】:

    标签: firebase authentication google-cloud-firestore firebase-authentication firebase-security


    【解决方案1】:

    也许我可以分两部分解释,

    • 首先,没有必要让某人欺骗某些标头并假装是您的域。原因是如果有人可以直接从您的域以匿名身份登录,他们就可以访问您允许他们访问的所有信息

    • 其次,也是最重要的一点,我认为您将 Firebase 的 NodeJS 服务器端访问弄错了。如果您想从节点服务访问整个数据库,请使用 Firebase admin SDK,并且当您从 firebase admin SDK 连接时,您无需进行任何类型的身份验证即可读写,因为您拥有管理员权限。

    • 仅供参考,您还可以从身份验证设置中将您的身份验证 IP 列入白名单,您可以在其中允许列入白名单的域

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-10
      • 2022-11-11
      • 2023-04-02
      • 2018-05-16
      相关资源
      最近更新 更多