【问题标题】:What is the best way to access the JWT from node?从节点访问 JWT 的最佳方式是什么?
【发布时间】:2017-03-09 00:57:49
【问题描述】:

我已经使用 Node.js 实现了 JWT 身份验证。当用户登录时,Node.js 签署/创建一个 JWT 并将其发回。此后,将其存储在 localStorage 中。现在,这可能是我出错的地方,但是......继续前进,我使用了快速路由器,并且在路由器代码中(显然是在节点级别)我希望能够访问令牌(在localStorage 中),以便我可以调用API 以获取更多数据。但是,我刚刚意识到 localStorage 在客户端,并且 node/express/router 无法识别localStorage。所以我被困住了。显然,我在做一些根本错误的事情......我不需要从快速路由器文件中访问localStorage。或许,我真的不应该从快速路由器文件,而是从客户端进行 API 调用。

任何提示/方向?

【问题讨论】:

  • “也许,我真的不应该从快速路由器文件,而是从客户端进行 API 调用。” 假设这似乎会更好您无需将任何私钥或“隐藏”信息从服务器发送到客户端即可完成。
  • 很酷,感谢您的建议。很高兴看到我的思路是正确的。非常感谢。

标签: javascript angularjs node.js html


【解决方案1】:

localstorage 是保存令牌的坏方法。您应该将令牌保存在 cookie 中,然后在您想要的地方使用。

示例:

new Cookies(req,res).set('access_token',token,{
  httpOnly: true,
  secure: true      // for your production environment
});

然后阅读:

var token = new Cookies(req,res).get('access_token');

【讨论】:

  • 是什么让本地存储成为比 cookie 更糟糕的选择?它如何存储在客户端与服务器端无关。唯一真正的问题是请求是如何形成的,以及是否同时存在 HTTP 和 HTTPS 页面。 (我使用 cookie,我只是看不到从本地存储中获取它并设置请求标头的任何主要缺点。)
  • cookies主要用于服务器端读取,本地存储只能在客户端读取
  • localStorage 是存储接口的实现。它存储没有过期日期的数据,并且只能通过 JavaScript 或清除浏览器缓存/本地存储的数据来清除 - 与 cookie 过期不同。
  • 是的,我知道——但是设置正确的标题很容易。
  • 我不反对使用 cookie,但 JWT 本质上应该是无会话的,因此用户信息不会存储在服务器端。使用 cookie 而不是 localStorage 只是为了让我可以像这样在服务器端访问令牌,这似乎是错误的。我应该能够在路由器代码(即服务器端代码)中访问令牌的唯一方法是从请求中检索它们。所以我仍然觉得我需要将我的 API 调用从 express 转移到客户端。
【解决方案2】:

每次向服务器端发出 API 请求时,都需要发送存储在客户端的 JWT。

https://jwt.io/introduction/ 向下滚动到 JSON Web 令牌如何工作? 部分,JWT 应以以下形式在 API 调用的标头中发送: Authorization: Bearer <token>

您如何执行此操作取决于您将 HTTP 请求发送到 API 的准确程度,但在任何方面都应该非常简单。您可以在此链接了解如何将标头添加到角度 $http 请求中: https://docs.angularjs.org/api/ng/service/$http

然后,每个经过身份验证的快速路由都需要检查标头,拉出 JWT,确保其有效,然后继续请求(如果 JWT 无效,则停止请求)。

【讨论】:

  • 谢谢。但是,要每次将 JWT 发送到 API,我需要先从 localStorage 中提取它。这是我的主要问题,我无法这样做,因为 localStorage 在节点/快递级别不可用。
  • 也许我误解了这个问题,但我认为您需要从客户端的 localStorage 中提取它,然后通过 HTTP 请求将其发送到 node/express。您的服务器端不是运行节点/快速服务器,而客户端只是浏览器吗?还是我不正确?您绝对应该从客户端向服务器进行 API 调用。
猜你喜欢
  • 1970-01-01
  • 2013-10-25
  • 1970-01-01
  • 1970-01-01
  • 2013-06-16
  • 2020-09-26
  • 1970-01-01
  • 2018-05-03
  • 1970-01-01
相关资源
最近更新 更多