Node.js 和 jsonwebtoken 在哪里做 JWT 过期?

Posted

技术标签:

【中文标题】Node.js 和 jsonwebtoken 在哪里做 JWT 过期?【英文标题】:Where to do JWT expiration with Node.js and jsonwebtoken? 【发布时间】: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. 【参考方案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 年仍然是当前标准吗?您引用的文章包括它们。

以上是关于Node.js 和 jsonwebtoken 在哪里做 JWT 过期?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 node.js 中更改 jsonwebtoken 的标头

Node.js 中未使用 RS256 算法生成 jsonwebtoken 令牌

使用由 jose4j 生成的令牌在 node.js 中使用 jsonwebtoken 验证 JWT 失败

哪一个? Node-jws 还是 node-jsonwebtoken? [关闭]

JsonWebToken远程代码执行漏洞(CVE-2022-23529)

在 node.js 中生成的 JWT(JSON Web Token) 未在 java 中验证