Firestore REST API 使用 http-client 发出经过身份验证的请求

Posted

技术标签:

【中文标题】Firestore REST API 使用 http-client 发出经过身份验证的请求【英文标题】:Firestore REST API make authenticated request with http-client 【发布时间】:2021-12-31 04:03:16 【问题描述】:

我想通过 REST API 从 Firestore 获取数据。我正在使用 HTTP-Client (Webstorm) 并执行以下操作。

首先我通过 Google 进行身份验证,它工作正常并返回一个令牌:

POST https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword?key=<firebase-api-key>
Accept: application/json
Content-Type: application/json


  "email": "some@email.com",
  "password": "notthispassword"

然后,尝试像这样从 firestore(不是 realtime-db)获取数据

GET https://firestore.googleapis.com/v1/projects/<projectId>/databases/(default)/documents/<collection>
Accept: application/json
Authorization: Bearer <token from auth response>

它一直在告诉我:


    "error": 
        "code": 401,
        "message": "Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.",
        "status": "UNAUTHENTICATED"
    

这些是我的 Firestore 安全规则:

rules_version = '2';
service cloud.firestore 
  match /databases/database/documents 
    match /document=** 
      allow read, write: if request.auth != null;
    
  

如果有人能告诉我哪里出了问题,我会很高兴。

【问题讨论】:

【参考方案1】:

解决方案的第一部分是仔细阅读回复。它包含以下链接https://developers.google.com/identity/sign-in/web/devconsole-project。

然后我必须明白,如果您使用的是 google-identitiy-toolkit,您有点离开了 firebase-realm 并且 必须附加在 GC-console 中生成的 api-key(不是firebase-key!) (https://console.cloud.google.com/apis/credentials) 到用于获取数据的 URL,如下所示:

GET https://firestore.googleapis.com/v1/projects/<projectId>/databases/(default)/documents/<collection>?key=<google-cloud-api-key>
Accept: application/json 
Authorization: Bearer <token from auth response>

【讨论】:

以上是关于Firestore REST API 使用 http-client 发出经过身份验证的请求的主要内容,如果未能解决你的问题,请参考以下文章

Firestore 模拟器 REST API 身份验证

带有 Firebase Id 令牌的 Firestore REST API

Firestore REST API 使用 http-client 发出经过身份验证的请求

在 Firestore REST API 中查询嵌套对象

Google Cloud Firestore REST API createDocument 自动生成 ID

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