Firestore 模拟器 REST API 身份验证

Posted

技术标签:

【中文标题】Firestore 模拟器 REST API 身份验证【英文标题】:Firestore Emulator REST API authentication 【发布时间】:2020-04-22 08:32:13 【问题描述】:

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

我一直在使用 Postman 为个人项目使用 Firestore Emulator REST API。如果我运行模拟器 (firebase emulators:start --only=firestore),我可以成功发出以下请求没有需要在 Authorization 标头中传递任何 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>(更新文档)

但是,当我尝试使用以下请求获取 here 所述的集合 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 生成了令牌(如here 所述)。

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

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

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

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

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

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

【问题讨论】:

如果 API 没有按您预期的方式工作,请在 GitHub 上提交问题。 github.com/firebase/firebase-tools 【参考方案1】:

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

listCollectionIds 是这些管理方法之一。这也是为什么这个功能是not supported by the web, ios, and android SDKs。

【讨论】:

这是有道理的。感谢胡安的快速回复。

以上是关于Firestore 模拟器 REST API 身份验证的主要内容,如果未能解决你的问题,请参考以下文章

在 Firestore REST API 中查询嵌套对象

Firestore使用Rest API更新文档字段

带有 Firebase Id 令牌的 Firestore REST API

Google Cloud Firestore REST API createDocument 自动生成 ID

在颤动中使用 REST api 将列表数据发送到云 Firestore 时出错

Android java:如何创建 POJO 并将其转换为 Cloud Firestore REST API 可接受的 JSON