当数据库在多个实例之间共享时,Firestore 规则

Firestore rules when a database is shared across multiple instances

假设有一个 Firestore 数据库被 1 - 静态 front-end 客户端2 - node.js 使用服务器.

基本上,只有 domainip address 可以使用该数据库,效果很好。

棘手的部分:

问题是 rules 无法将我们的 ip address.

列入白名单

所以我们尝试使用这个:

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

然后 node.js 服务器可以 signInAnonymously,而 front-end 客户端需要在访问任何内容之前验证用户。

我的问题

signInAnonymously 是否足够安全? 因为 anonymous auth 开启了,有人可以从我们的 front-end 中 signInAnonymously 吗? 有人可能会欺骗某些 header 并假装是我们的域只是为了验证自己的匿名性吗?

对于这种情况,最佳做法是什么?

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

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

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

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