firebase - Firestore 模拟器 REST API 身份验证

标签 firebase rest api google-cloud-firestore

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

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

  • 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 token ,则此请求将成功运行。我使用 gcloud auth application-default print-access-token 生成了 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 的所有请求都不需要任何身份验证,但似乎有些需要,有些不需要,而且我无法在有关模拟器如何工作的文档中找到任何其他详细信息。

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

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

    最佳答案

    这与真实 API 的行为相匹配。当您发送没有身份验证 token 的请求时,您是在尝试通过安全规则系统进行身份验证。某些方法不支持通过安全规则进行身份验证,因为您可能不希望最终用户调用它们。这些主要是数据库管理方法,因此是错误描述。例如,您不希望最终用户调用任何索引方法。
    listCollectionIds 是这些管理方法之一。这也是这个特性是 not supported by the web, iOS, and Android SDKs 的原因。

    关于firebase - Firestore 模拟器 REST API 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61360640/

    相关文章:

    java - Kindle-我可以从kindle paperwhite中获取数据吗?

    python - 从 JSON 中获取特定数据

    python - flask-restful 嵌套资源

    firebase - 在 Firebase Crashlytics 中,我在哪里可以看到报告的崩溃中的用户 ID?

    swift - 创建一个新的 Firebase 用户——正确的方法

    javascript - Firebase 排序和过滤

    android - 如何在 Android 中集成 RESTful webservice

    WCF Rest DataContract 和 ServiceContract 版本控制

    api - 在 gmail api 中搜索特定的回复 header

    android - Google Firestore 保存用户输入 Kotlin