【问题标题】:Restricting Cloud Firestore to a specific domain将 Cloud Firestore 限制为特定域
【发布时间】:2019-04-24 19:41:31
【问题描述】:

有没有办法限制 Cloud Firestore(用于托管/网络)进行 CRUD 操作,仅限于一个域,比如 xyz.com

例如,下面的规则在未经授权的情况下锁定了read, update, delete,但您仍然可以将write 的东西写入数据库。

service cloud.firestore {
  match /databases/{database}/documents {
    match /coming-soon-email-ids/{document=**} {
      allow write;
      allow read, update, delete: if request.auth.uid == !null;
    }
  }
}

还是我必须在其中集成 Google 的防火墙?

【问题讨论】:

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


【解决方案1】:

Firebase 安全规则无法限制对网络域的访问。在非常普遍的意义上,这是不可能的,因为 Firestore 旨在从世界各地的移动客户端访问,使用 Web、Android 和 iOS。 Android 和 iOS 客户端似乎从未来自某个域。他们只是通过提供的客户端库或有时通过 Firestore REST API 直接访问数据库。 Web 客户端甚至可以欺骗他们明显的域(只有在 HTTP 请求中不安全的“Referrer”标头才真正可用)。

您只能真正限制使用 Firebase 身份验证登录到您的应用或网站的用户的访问权限,但您不能限制他们的来源哪里

【讨论】:

  • 好的,有没有办法限制一个或多个字段?
  • 我不知道你在问什么。这听起来像是一个与这个无关的全新问题的开始。
  • 如果通过 google 登录(例如 G 套装)我想我们只需在 firestore 规则中检查电子邮件域
  • 不能使用 apiKey 构建我自己的指向您的 Firestore 的应用程序,然后也实现匿名登录吗?
【解决方案2】:

我有同样的问题,我想出了一个解决方案。您可以匿名登录:

const signIn = async () => {
auth.signInAnonymously()
.then(() => {
  // Signed in..
})
.catch((error) => {
  var errorCode = error.code;
  var errorMessage = error.message;
  // ...
});

然后你可以把你的规则像:

allow read, write: if request.auth != null;

然后在身份验证中,您可以激活匿名方法登录并添加您的授权域。

【讨论】:

  • 你测试过这个吗?我尝试从未列出的域进行匿名身份验证,但我仍然可以从 Firestore 获取数据...
  • 我对此进行了测试并使用了它。记得在firestore规则中添加规则,还要添加你要允许的域
  • 匿名登录是否会阻止您使用特定帐户登录?
  • 我认为你可以同时拥有两个系统
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-18
  • 2018-03-18
  • 2016-10-26
  • 2018-03-17
相关资源
最近更新 更多