【发布时间】:2019-10-29 05:25:39
【问题描述】:
我使用下面的 firebase rest API 来访问我的 firestore 数据库数据
https://firestore.googleapis.com/v1/projects/testproject/databases/(default)/documents/Test/Employee?key=a29.ImCbB4CbV3CWoPouWsh24NrQ-3eKUmuK-dELilZGmPqqDlq4jJNWBmJ47MnJ1pBQSDPNqPeknqD4Usm9SIf6pmG-8sfK15QlkQR
为了访问我的 Firestore 数据库,我在密钥部分使用了我的访问令牌,但我收到了来自 firebase 的电子邮件,指出“[Firebase] 您的 Cloud Firestore 数据库的规则不安全”。直到那时我才发现,即使没有有效的访问令牌,任何人都可以访问我的数据库数据
所以我尝试在数据库中添加一些规则,如下所示,并希望只有有效的访问令牌才能访问我的数据库
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if request.auth.uid != null;
}
}
}
但添加规则后,即使使用有效的访问令牌,我也无法再使用 REST API 查询我的数据库,其余 api 返回以下错误
{
"error": {
"code": 403,
"message": "Missing or insufficient permissions.",
"status": "PERMISSION_DENIED"
}
}
任何人都知道我应该如何编辑规则以确保我的数据库安全,同时仍然可以通过 REST API 访问。
谢谢
【问题讨论】:
-
您需要调用各个集合,并确保只有应该能够访问它们的特定用户才能真正访问它们。由于我们不知道您的应用程序的安全要求,因此我们无法提供具体建议。请从文档开始了解安全规则的工作原理。 firebase.google.com/docs/firestore/security/get-started
-
我确实阅读了文档,但找不到 REST API 安全规则的信息。根据文档,“在读取或写入任何数据之前,都会根据您的安全规则评估来自 Cloud Firestore 移动/Web 客户端库的每个数据库请求。如果规则拒绝访问任何指定的文档路径,则整个请求都会失败。” ,似乎安全规则仅适用于客户端库访问。
-
我使用 REST API 访问我的数据库,访问令牌为 firestore.googleapis.com/v1/projects/sales/databases/(default)/…,但如果我没有设置任何安全规则,即使使用随机令牌密钥也可以访问数据库。
-
here 它提到:“如果您使用服务器客户端库或 REST 或 RPC API,请确保设置 Cloud Identity and Access Management(IAM) for Cloud Firestore.”所以这意味着规则不适用于REST API。基于此,快速回答是:“这是不可能的”,但您想要实现的目标,并且很可能通过 IAM 您可以实现。
-
所以您希望通过 REST API 对您的数据库进行公共读写访问,但您还希望它“安全”吗?这似乎不可能。公共、未经身份验证的访问与安全相反。
标签: firebase google-cloud-firestore firebase-security