使用 JSON Web 令牌和 Firestore 支持 Bearer 令牌

Use JSON Web Token and Firestore support for Bearer token

我想在使用与 Firestore 通信的 node.js 应用程序时在 Firestore 中获得身份验证和授权支持。用户通过 URL(带有嵌入式令牌的 http.get)进行交互,并与 node.js 应用交互。该应用程序接受用户的一些输入,然后与 firestore 对话。客户端执行安全活动所需的访问令牌都嵌入在 GET url(id + 访问令牌)中。

我这里有一个流程,想验证这个流程是正确的还是我遗漏了什么?我找不到最明确的文档来指导我执行后续步骤。

首先我在生成 GET url 之前生成了 JWT 令牌部分: 用于生成 JWT token 的函数如下: // 生成 JWT 令牌

function getJWT() {
  var token = jwt.sign({
    exp: Math.floor(Date.now() / 1000) + (60 * 60) * constants.JWT_TOKEN_VALIDITY_HOURS,
    admin: '​XXXXXXX'
  }, constants.JWT_SECRET_TOKEN);
  return token;
}

Bearer Tokens: 我在许多论坛上听说我可以在授权 header 中将此 JWT Web 令牌作为 "Bearer token" 发送。这意味着 firestore 神奇地为我做了所有授权。还有什么我应该做的吗?

1) 我认为我需要使用此自定义 JSON 网络令牌登录,并获取 ID 令牌。那是对的吗? 从 Firebase 客户端 SDK 登录 使用 Firebase Auth REST API 将自定义令牌交换为 ID 令牌。 2) 然后,当我请求数据库访问作为授权 header 设置为 Bearer {YOUR_TOKEN}.. 然后您可以使用生成的 ID 令牌访问 Firestore REST API: https://firebase.google.com/docs/firestore/use-rest-api#working_with_firebase_id_tokens

想象一下,我也将不记名令牌嵌入 header...使用 JSON 访问令牌或我从 firestore

获得的 ID 令牌
return this.http
.get(${OUR URL to app}, {
headers: new HttpHeaders().set('Authorization', Bearer ${JSON Web accessToken or ID Token})
})​

用户点击具有此访问令牌的 URL。他们同意条款和条件,然后我 re-direct 他们到一个云功能做一些处理。这个 JSON 网络令牌被传递。我也使用此代码验证 JWT 令牌以进行身份​​验证。

function verifyToken(token) {
  try {
    var decoded = jwt.verify(token, constants.JWT_SECRET_TOKEN);
    var admin = decoded.admin;
    if (admin == "​XXXXXXXXX") {
      return true;
    }
    return false;
  } catch (err) {
    console.log(err);
    return false;
  }
}

任何与此相关的示例都会有所帮助。

我用过的相关链接 https://firebase.google.com/docs/firestore/use-rest-api#working_with_firebase_id_tokens

https://auth0.com/blog/how-to-authenticate-firebase-and-angular-with-auth0-part-1/

终于 https.onCall 的协议规范 在 https://firebase.google.com/docs/functions/callable-reference

可选:授权:不记名 发出请求的 logged-in 用户的 Firebase 身份验证用户 ID 令牌。后端自动验证此令牌并使其在处理程序的上下文中可用。如果令牌无效,请求将被拒绝。

这是我从 Google 得到的官方回复(但只有在用户有身份验证请求时才有效——我认为是指有效的 firebase 用户),但我想知道的是使用Json web token 本身我能实现这样的东西吗

Just to clarify, you'll need either a Firebase ID token or a Google Identity OAuth 2.0 token to be passed on to the Cloud Firestore endpoints as an Authorization header set to Bearer {YOUR_TOKEN}.

You may refer on the following links for more information on this:

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

Also, we don't have any samples related to this, but there's an internal request to improve our REST documentation. I won't be able to share you any details or timelines as to when it could materialize, however, you may keep an eye out on our release notes or Firebase blog for any updates we might have.

我希望在 Whosebug 中我能得到更多与此相关的示例。但现在这就是我所得到的。