繁体   English   中英

Firestore 模拟器 REST API 身份验证

[英]Firestore Emulator REST API authentication

我正在寻找对 Firestore Emulator REST API 处理未经身份验证请求的方式的预期行为的一些确认,因为我想我可能已经发现了一些可能的不一致之处。

我一直在使用 Postman 使用 Firestore 模拟器 REST API 进行个人项目。 如果我运行模拟器( firebase emulators:start --only=firestore ),我可以成功发出以下请求,而无需Authorization header 中传递任何Bearer令牌和请求:

  • GET http://localhost:8080/v1/projects/<MY_PROJECT_ID>/databases/(default)/documents/ (返回所有文档)
  • DELETE http://localhost:8080/v1/projects/<MY_PROJECT_ID>/databases/(default)/documents/<COLLECTION_ID>/<DOCUMENT_ID> (删除单个文档)
  • POST http://localhost:8080/v1/projects/<MY_PROJECT_ID>/databases/(default)/documents/<COLLECTION_ID> (在集合中创建一个新文档)
  • PATCH http://localhost:8080/v1/projects/<MY_PROJECT_ID>/databases/(default)/documents/<COLLECTION_ID>/<DOCUMENT_ID> (更新文档)

但是,当我尝试使用以下请求获取此处所述的集合 ID 列表时,我收到以下错误:

  • POST http://localhost:8080/v1/projects/<MY_PROJECT_ID>/databases/(default)/documents:listCollectionIds

回应是:

{
    "error": {
        "code": 403,
        "message": "Metadata operations require admin authentication.",
        "status": "PERMISSION_DENIED"
    }
}

如果我传递了Bearer令牌,则此请求将成功运行。 我使用gcloud auth application-default print-access-token生成了令牌(如此所述)。

请注意,我已将 Firestore 规则设置为允许所有文档的所有读取和写入,以使事情变得更简单:

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true
    }
  }
}

文档提供了身份验证的详细信息,但是,他们描述的上下文是针对https://firestore.googleapis.com/v1/发出请求,而不是在使用模拟器时。

我希望对模拟器 API 的所有请求都不需要任何身份验证,但似乎有些需要,有些不需要,我无法在文档中找到有关模拟器应该如何工作的任何其他详细信息。

目前,我不确定这是否是一个错误,我应该在 GitHub 上提出问题,或者这是否是预期的行为,我应该在每个请求中传递一个Bearer令牌以确保安全。

任何帮助,将不胜感激。 谢谢。

这与真正的 API 的行为相匹配。 当您发送没有身份验证令牌的请求时,您正在尝试通过安全规则系统进行身份验证。 某些方法不支持通过安全规则进行身份验证,因为您可能不希望最终用户调用它们。 这些主要是数据库管理方法,因此有错误描述。 例如,您不希望最终用户调用任何索引方法。

listCollectionIds是这些管理方法之一。 这也是web、iOS 和 Android SDK 不支持此功能的原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM