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

Posted

技术标签:

【中文标题】对 Bearer 令牌使用 JSON Web 令牌和 Firestore 支持【英文标题】:Use JSON Web Token and Firestore support for Bearer token 【发布时间】:2018-12-16 21:23:15 【问题描述】:

我想在使用与 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 网络令牌登录,并获取一个 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 令牌以进行身份​​验证。​

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

Firestore Custom 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

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

【问题讨论】:

你有没有想过这个问题? 我已经阅读了 Google/Firebase 团队提供的各种教程和示例。似乎将 Authorization: Bearer 添加到 XHR 请求是人们将/应该如何将用户凭据发送到自定义后端的方式。所以你的流程对我来说是正确的。 【参考方案1】:

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

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

您可以参考以下链接了解更多信息:

    REST API Firestore authentication with ID Token https://firebase.google.com/docs/firestore/use-rest-api#authentication_and_authorization

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

我希望在 *** 中我可以得到更多与此相关的示例。但现在这就是我得到的全部了。

【讨论】:

以上是关于对 Bearer 令牌使用 JSON Web 令牌和 Firestore 支持的主要内容,如果未能解决你的问题,请参考以下文章

如何生成 Bearer 令牌以调用远程 Web API

Owin Web API Bearer Token 直通

使用 .NET Core 中的公共安全密钥配置 JWT Bearer 令牌验证

从 Web API 的不记名令牌返回用户角色

服务器端使用 Bearer 令牌以编程方式在 Java 中验证 Keycloak 用户

Bearer 用于身份验证令牌,但用于不同的令牌?