繁体   English   中英

Firebase Cloud Firestore - 通过 REST API 的身份验证错误

[英]Firebase Cloud Firestore - Authentication error via REST API

我正在尝试请求令牌并使用它从 Cloud Firestore 数据库读取/写入数据。

要请求令牌,我通过 Postman 发送一个带有以下合成器的 POST:

https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPassword?key={API_KEY}

并将以下内容添加到正文中:

{"email":"{YOUR_EMAIL_ADDRESS}","password":"{PASSWORD}","returnSecureToken":true}

所以我通过转到 Firebase 控制台 -> 设置 -> 项目配置来获取我的 API_KEY。

然后,我的 POST 请求令牌如下:(别担心,这里没有敏感数据,它们被修改了)

在此处输入图片说明

然后,我收到了这个答案:

{
  "kind": "identitytoolkit#VerifyPasswordResponse",
  "localId": "jGEL4WSI9wRPU11yx9k9ZpAUac73",
  "email": "jeferson.pehls@gmail.com",
  "displayName": "",
  "idToken": "eyJhbGciOiJSUzI1NiIsImtpZCI6IjI1OTc0MmQyNjlhY2IzNWZiNjU3YzBjNGRkMmM3YjcyYWEzMTRiNTAiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL3NlY3VyZXRva2VuLmdvb2dsZS5jb20vZWxldHJvbmljYS1hYjZiMSIsImF1ZCI6ImVsZXRyb25pY2EtYWI2YjEiLCJhdXRoX3RpbWUiOjE1ODA5NTIxOTMsInVzZXJfaWQiOiJqR0VMNFdTSTl3UlBVMTF5eDlrOVpwQVVhYzczIiwic3ViIjoiakdFTDRXU0k5d1JQVTExeXg5azlacEFVYWM3MyIsImlhdCI6MTU4MDk1MjE5MywiZXhwIjoxNTgwOTU1NzkzLCJlbWFpbCI6ImplZmVyc29uLnBlaGxzQGdtYWlsLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwiZmlyZWJhc2UiOnsiaWRlbnRpdGllcyI6eyJlbWFpbCI6WyJqZWZlcnNvbi5wZWhsc0BnbWFpbC5jb20iXX0sInNpZ25faW5fcHJvdmlkZXIiOiJwYXNzd29yZCJ9fQ.H0Mj3J7q_8L9IDAK2-zCZFaN1NP9tG6PKPpmEtjlNcSpT2zxXXPpHN-lxgVhyj_2EDxT1_ZikX2_l4EFBmy2ctYmYOxZF0Pm1UnFaLnXFRMFg7kFxkk6wLZlwI_cFp1TGmYZdgwJBhoude_ItmGlbGFSQGjwyO00DVyHq1nRIh-zl-NUXdMABLE_hbGYlXPYO6VlHLZ-ROXx4n-OnQ2bamNo4l0kp9YRV1z44jYR9ngbkW-eWgu4O7lRSlHgY0rBKF8lnPA__vKEgLyU-hheMwIFVdn7jVJkoKWkWm_-q6MVTCv9YKc0JNDlJm07QGBjss5xBbNWwlPfQ-MBejReoQ",
  "registered": true,
  "refreshToken": "AEu4IL2RMDFBsoQ5FEsN6rSznT2oElkKSxude28oFWspMHBAzY0J084TbIPfhTtOoKFePO3lnBFpExLraVVE2E2CW2JMSJQ7FFXlrExqULkYdG3n1OxHk8VU01GvBMwJdDTC6i48OOinouYRludjz0tA6xvmaOgfhmm9-NXj3SYU1AIkSXJi5ghYxRuiO4STwg_GpjvRP0Z-NdisYX01wHxmuETHu80VVA",
  "expiresIn": "3600"
}

在此处输入图片说明

然后,我将尝试使用收到的令牌:

在 Postman 上,我执行 GET https://firestore.googleapis.com/v1/projects/eletronica-ab6b1/databases/(default)/documents/colA/docA.json ,其中 colA 是 COLLECTION , docA 是 DOCUMENT 。 此请求的正文选择为“无”。 然后我点击“授权”选项卡,选择类型“不记名令牌”并在令牌字段中粘贴上一个请求中收到的令牌字符串。 然后点击发送。 并收到这个答案:

{
  "error": {
    "code": 403,
    "message": "Missing or insufficient permissions.",
    "status": "PERMISSION_DENIED"
  }
}

这个错误的原因是什么? 可能缺少什么?

会不会是规矩? 我目前的规则是这些,我没有随时更改它们,它们是我创建数据库以来的原始值。

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if false;
    }
  }
}

在此处输入图片说明

问候。

REST api 调用不会让您使用这些规则访问数据库。 您应该更改允许读取,写入:允许读取,写入:如果为真; 使其可供任何用户使用。

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
     allow read, write: if true; //<--- Here
    }
  }
}

注意:使读、写为真是一个安全漏洞。 要么你应该使用if request.auth.uid != null; 仅让经过身份验证的用户访问数据库(包括像您在此处所做的那样使用令牌)或使用带有 nodejs 后端的 firebase admin 和您当前的安全规则。 正如 firebase 文档中提到的,Firebase Admin SDK 将绕过数据库安全规则。

暂无
暂无

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

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