首页 > 解决方案 > 对 Bearer 令牌使用 JSON Web 令牌和 Firestore 支持

问题描述

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

我这里有一个流程,想验证这个流程是否正确,或者我遗漏了什么?我无法找到最明确的文件来指导我遵循的步骤。

首先我在生成 GET url 之前生成 JWT 令牌部分: 用于生成 JWT 令牌的函数如下: // 生成 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;
}

不记名令牌:​我在许多论坛上听说我可以将此 JWT Web 令牌作为授权标头中的“不记名令牌”发送。这意味着 Firestore 神奇地为我完成了所有授权。还有什么我应该做的吗?

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

想象一下,我还将承载令牌嵌入到标头中......使用 JSON 访问令牌或我从 firestore 获得的 ID 令牌

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

​用户单击具有此访问令牌的 URL。他们同意条款和条件,然后我将他们重定向到执行某些处理的云功能。此 JSON Web 令牌被传递。我也使用此代码验证 JWT 令牌以进行身份​​验证。​</p>

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;
  }
}

​任何与此相关的示例都会有所帮助。​</p>

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

Firestore 自定义令牌

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

最后https://firebase.google.com/docs/functions/callable-reference中 https.onCall 的协议规范

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

标签: authenticationauthorizationjwtgoogle-cloud-firestorebearer-token

解决方案


这是我从谷歌得到的官方回复(但只有在用户有身份验证请求时才有效——我认为是指有效的 firebase 用户),但我想知道的是使用 Json Web 令牌本身可以实现类似这个。

澄清一下,您需要将 Firebase ID 令牌或 Google Identity OAuth 2.0 令牌作为设置为 Bearer {YOUR_TOKEN} 的授权标头传递到 Cloud Firestore 端点。

您可以参考以下链接以获取更多信息:

  1. 带有 ID 令牌的 REST API Firestore 身份验证
  2. https://firebase.google.com/docs/firestore/use-rest-api#authentication_and_authorization

此外,我们没有任何与此相关的示例,但是有一个内部请求来改进我们的 REST 文档。我无法与您分享有关何时实现的任何详细信息或时间表,但是,您可以关注我们的发行说明或 Firebase 博客,了解我们可能有的任何更新。

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


推荐阅读