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? [关闭]