【问题标题】:Firestore Custom TokensFirestore 自定义令牌
【发布时间】:2018-11-14 04:56:53
【问题描述】:

我正在尝试将自定义身份验证令牌与 Firestore 一起使用。我正在使用 nodejs 使用以下代码生成令牌。

const admin = require('firebase-admin');
const serviceAccount = require('./ServiceAccountKey.json')

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount)
});

var uid = "some-uid";
var claim = {
  control: true
};
admin.auth().createCustomToken(uid, true)
  .then(function(customToken) {
    console.log(customToken)
  })
  .catch(function(error) {
    console.log("Error creating custom token:", error);
  });

当我运行它时,我得到一个令牌。我拿那个令牌并尝试使用 https://firestore.googleapis.com/v1beta1/projects/example-project-5caa9/databases/(default)/documents/users 带有标题

授权:承载eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJjbGFpbXMiOnsiY29udHJvbCI6dHJ1ZX0sInVpZCI6InNvbWUtdWlkIiwiaWF0IjoxNTI4MTQ0NzY3LCJleHAiOjE1MjgxNDgzNjcsImF1ZCI6Imh0dHBzOi8vaWRlbnRpdHl0b29sa2l0Lmdvb2dsZWFwaXMuY29tL2dvb2dsZS5pZGVudGl0eS5pZGVudGl0eXRvb2xraXQudjEuSWRlbnRpdHlUb29sa2l0IiwiaXNzIjoiZmlyZWJhc2UtYWRtaW5zZGsteG9jMDRAZXhhbXBsZS1wcm9qZWN0LTVjYWE5LmlhbS5nc2VydmljZWFjY291bnQuY29tIiwic3ViIjoiZmlyZWJhc2UtYWRtaW5zZGsteG9jMDRAZXhhbXBsZS1wcm9qZWN0LTVjYWE5LmlhbS5nc2VydmljZWFjY291bnQuY29tIn0.Bjl6VY5CZKIpNyCayROWr_ZBSRmo11hiwtnx_cbbw2Ggk3J2x0Ml2OkpXhU-vAD6Q53fCZwGgXeCdxnsXw0lr55cJH3Q6J7gitzQoRnfJgUX9Dv1gbI90OWashxMmxtzPIpwgSnfBv61mkdv9ZVrF8o362mQBx_LUQzvGgVPEN9_9UNCH7peOS4KYr_YRMpCQVem0XMNh9WKlyBZuScjHpY6dZZhXqOHda0W9-MNAfvQ-D0pt-osq4ty-D_WYk6CjLNmxzvHoZeoIk1YShJM4Mpyec3lXFcCXNYG2c3_r2tskTB0LF7Fc7Bg5XuJwlrAzHrnRis6iZFCx8sqH1b-ZG P>

获取以下 JSON。

{
    "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"
    }
}

我的规则如下

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.auth.uid != null;
    }
  }
}

【问题讨论】:

  • 请编辑您的问题以准确显示您如何使用收到的令牌调用 REST API。
  • 好的,我修复了帖子。
  • 当然,您正在编写代码来发出这个 HTTP 请求,对吧?你能显示那个代码吗?
  • 我还没有实现,但现在我正在使用邮递员进行测试

标签: node.js firebase firebase-authentication google-cloud-firestore firebase-admin


【解决方案1】:

您无法使用自定义令牌直接访问 REST API。您需要使用自定义令牌登录,并获取 ID 令牌。有两种方法可以做到这一点:

然后您可以使用生成的 ID 令牌访问 Firestore REST API:

https://firebase.google.com/docs/firestore/use-rest-api#working_with_firebase_id_tokens

【讨论】:

  • 我真的需要使用 ServiceAccountKey.json 和 firebase-admin sdk 来生成自定义令牌吗?
  • 可能有用:复制自firebase.google.com/docs/auth/admin/create-custom-tokens。 “您可以使用 Firebase Admin SDK 创建自定义令牌,或者如果您的服务器使用 Firebase 本身不支持的语言编写,您可以使用第三方 JWT 库。”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-10
  • 2017-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-15
  • 2017-06-16
相关资源
最近更新 更多