【问题标题】:jwt.verify() returns jwt expired when the expiration is 24hjwt.verify() 在过期时间为 24h 时返回 jwt expired
【发布时间】:2019-10-01 10:58:40
【问题描述】:

我使用jwt创建了一个令牌:

const jwt = require('jsonwebtoken');
const token = jwt.sign({
filePath: "path/to/file"
}, 'secretKey', {
expiresIn: "24h"
});
try {
  console.log(token)
  var decoded = jwt.verify(token, 'secretKey');
} catch(err) {
 console.log(err)
}

jwt.header:

{
  "alg": "HS256",
  "typ": "JWT"
}

有效载荷:

{
  "filePath": "path",
  "iat": 1557833831,
  "exp": 1557920231
}

当我在我的真实应用中测试上面提到的 sn-p 代码时,我收到一条错误消息:

jwt expired

使用jwt debugger,令牌有效,应在 24 小时后过期。 verify() 返回的错误检查过期。 jwt如何检查过期?还是不检查?

【问题讨论】:

  • 如果您尝试使用其他值 expiresIn 会怎样?喜欢5000 而不是24h
  • 您可以对即将过期的令牌进行一般解释吗?或者它必须是特定于您的库?
  • 这是一个浏览器刷新问题。刷新浏览器后,问题就解决了。但这不是预期的行为。

标签: javascript jwt


【解决方案1】:

那么既然问题是,jwt是如何检查过期日期的,那基本上就取决于可以根据JWT RFC实现的一些属性了

一个是exp。如果令牌在当前日期时间之前过期,则无法处理 JWT

“exp”(过期时间)声明标识过期时间 或者在此之后,JWT 不得被接受处理。这 处理“exp”声明需要当前日期/时间 必须早于“exp”声明中列出的到期日期/时间。

实施者可以提供一些小的余地,通常不超过 几分钟,以解决时钟偏差。它的值必须是一个数字 包含 NumericDate 值。使用此声明是可选的。

另一个需要注意的是iat,它代表发布于

“iat”(发布于)声明标识 JWT 的时间 发布。此声明可用于确定 JWT 的年龄。它的 value 必须是一个包含 NumericDate 值的数字。使用这个 声明是可选的。

据我所知,可以用于时间验证的最后一个是nbf,代表not before

“nbf”(不是之前)声明标识 JWT 之前的时间 不得接受处理。 “nbf”的处理 声明要求当前日期/时间必须晚于或等于 “nbf”声明中列出的不早于日期/时间。实施者可以 提供一些小的回旋余地,通常不超过几分钟,以 考虑时钟偏差。它的值必须是一个包含 数字日期值。使用此声明是可选的。

现在,对于手头的代码,我没有看到任何内容,经过以下设置,这对我来说非常好

const jwt = require('jsonwebtoken');

const token = jwt.sign( {
  hello: 'world'   
}, 'myverysecretkey', {
    expiresIn: '24h'
});

try {
    const verify = jwt.verify( token, 'myverysecretkey' );
    console.log( verify );
} catch (err) {
    console.error( err );
}

哪个会输出

Object {hello: "world", iat: 1557840459, exp: 1557926859}

这可以在codesandbox 链接上验证

【讨论】:

  • 非常感谢您的解释。我知道代码运行良好,但是当我使用生成的令牌调用相同的 url 时,返回的 jwt 过期并且通常持续 24 小时。这就是为什么我不明白这个错误是如何引发的。因为iat没有达到exp。
  • @Slim 也许您在某个地方发送了旧令牌?我真的不知道您的“真实”应用可能出了什么问题
猜你喜欢
  • 1970-01-01
  • 2018-12-22
  • 2018-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-08
  • 2019-04-19
  • 2018-05-22
相关资源
最近更新 更多