【问题标题】:Where to do JWT expiration with Node.js and jsonwebtoken?Node.js 和 jsonwebtoken 在哪里做 JWT 过期?
【发布时间】:2017-08-23 04:45:45
【问题描述】:

我正在创建一个基于 MEAN 的 Web 应用程序,我有以下问题:

将令牌 (JWT) 过期放在哪里更好?现在我正在做的是创建一个没有过期的令牌,并且在客户端中,我使用该令牌和 10 分钟的过期时间创建了一个 cookie。

在那个 cookie 中,我在每个请求中添加 10 分钟。如果用户在 10 分钟内处于非活动状态,则 cookie 过期并且在没有令牌的情况下发出请求。

【问题讨论】:

  • 为什么不将它保存在令牌本身中?
  • 阅读@Joe Clay 的回答,了解为什么您不应该遵循没有过期的 JWT 并依靠 cookie 来确定它的方向。您可以将 JWT 存储在 localStorage 上,如果最终需要将令牌存储在 cookie 中,请至少将其设置为 HttpOnly (owasp.org/index.php/HttpOnly.

标签: node.js cookies jwt token


【解决方案1】:

在 Chrome 中:

F12 ➡️ 应用程序选项卡 ➡️ Cookie ➡️ 将令牌复制并粘贴到 Postman 等 REST 客户端中

哎呀,我刚刚为您的 API 获得了一个永久令牌!

换句话说,正如您所怀疑的,这不是一个好的做事方式。到期时间应该在令牌的有效负载中 - 这样,您可以验证没有人更改它,因为它将使用您的服务器机密值进行签名。

Node JWT 库其实是has this functionality built-in:

jwt.sign({
  // 1 hour expiration
  exp: Math.floor(Date.now() / 1000) + (60 * 60),
  data: 'foobar'
}, 'secret');

这并不是说您不能/不应该对您的令牌使用 cookie 过期,但仅依靠它并不安全。

【讨论】:

  • 它可以刷新该令牌的到期时间吗?增加有效期?还是必须在过期前生成一个新令牌?
  • @elcabezon: This article 应该为您指明正确的方向。
  • @JoeClay JSON Web 签名 (JWS) 和 JSON Web 加密 (JWE) 在 2020 年仍然是当前标准吗?您引用的文章包括它们。
猜你喜欢
  • 2016-01-10
  • 1970-01-01
  • 2020-05-11
  • 2021-09-23
  • 2016-03-13
  • 2019-04-23
  • 2015-05-06
  • 2016-01-21
  • 1970-01-01
相关资源
最近更新 更多