在 ExpressJs 中使用时 JWT 中的多个问题

Posted

技术标签:

【中文标题】在 ExpressJs 中使用时 JWT 中的多个问题【英文标题】:Multiple Issues in JWT while using in ExpressJs 【发布时间】:2018-03-12 13:50:18 【问题描述】:

我正在使用Express Jsjsonwebtoken 以及版本^7.4.1

问题:

    如何区分expiredinvalid令牌 如何使用refresh tokensJWT 当我验证由express js 创建的JWT 令牌始终无效时,但当使用相同的数据在jwt.io 中创建令牌时是有效的。我错过了什么吗?下面是那个链接 https://jwt.io/#debugger?&id_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6Im1tQGcuY29tIiwiYWRtaW4iOnRydWUsInRpbWUiOiIyMDE3LTEwLTAxVDA0OjU1OjQyLjM2MFoiLCJpYXQiOjE1MDY4MzM3NDIsImV4cCI6MTUwNjgzMzc1Mn0.VqlogOWRfGgTN3xN8Gs3Ivk1gZXMr_aiKZzTxN0EgNE(无效令牌) https://jwt.io/#debugger?&id_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6Im1tQGcuY29tIiwiYWRtaW4iOnRydWUsInRpbWUiOiIyMDE3LTEwLTAxVDA0OjU1OjQyLjM2MFoiLCJpYXQiOjE1MDY4MzM3NDIsImV4cCI6MTUwNjgzMzc1Mn0.M5pj4znpn-_6-jqsqVm2BWGEZTyMBNy2D6VdNejbsI0(有效令牌) 生成 JWT 令牌的代码 return jwt.sign(user, config.secretKey, expiresIn: 10 //Time to expire token in seconds. );

【问题讨论】:

【参考方案1】:
    对于客户来说没有区别,在这两种情况下他都会得到 401。 在服务器端,您将验证签名。和 exp 字段。 请参阅我的回答:Should I explicitly send the Refresh Token to get a new Access Token - JWT 这是用户尝试在 jwt.io 上验证令牌的常见问题。 您必须将config.secretKey 的内容粘贴到“已解码”列中表格的“验证签名”部分的编辑字段中。在第二种情况下,秘密是“秘密”,jwt.io 上的默认设置。如果您有不同的秘密,例如第一种情况,jwt.io 不知道它,因此无法验证它。

【讨论】:

1) 如何在服务器端验证令牌? 2) 如何将刷新令牌与 JWT 一起使用?我的意思是如何生成刷新令牌以及如何验证它们并发送新的访问令牌。 3) 现在,这是正确的。 1) 可能是 jwt.verify(...) ,检查你的框架的文档,我没有使用 node.js 并在这里表达。基本上你和 jwt.io 做同样的事情:检查签名是否匹配。 2)也许这有帮助:***.com/questions/26580213/… 我可以使用另一个 JWT 令牌作为刷新令牌吗?有更多的过期时间。验证此刷新令牌并发送新的访问令牌。 基本上你可以随心所欲地实现你的令牌和刷新令牌处理,但通常刷新令牌不是jwt。更好地依赖框架提供的功能。 我不确定jwtnodejs 中提供的刷新令牌,我访问了您发布的链接,但它没有描述refresh tokens 的实现。那是正确的链接吗?

以上是关于在 ExpressJs 中使用时 JWT 中的多个问题的主要内容,如果未能解决你的问题,请参考以下文章

如何使用基于网站的 ExpressJs 设置 CORS 和 JWT 令牌验证

ExpressJS - JWT 和 Passport 实现

使用 Expressjs + JWT + Angularjs 的回调问题

如何从 expressjs 发送 jwt 令牌以响应应用程序? [关闭]

使用 JWT 时出错,还想将 JWT 令牌发送到其他 API

JWT 令牌在一定时间后不会过期