当到期时间为24h时,jwt.verify()返回jwt到期

时间:2019-05-14 12:04:05

标签: javascript jwt

我使用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
}

当我在真实的应用程序中测试上述代码段时,出现错误消息:

jwt expired

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

1 个答案:

答案 0 :(得分:1)

因此,既然问题是,jwt如何检查到期日期,它基本上取决于可以根据JWT RFC

实现的某些属性。

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

  

“ exp”(到期时间)声明标识了的到期时间      或之后不得接受JWT进行处理。的      处理“ exp”索赔要求当前日期/时间      必须在“ exp”声明中列出的到期日期/时间之前。

     

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

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

  

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

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

  

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

现在,对于手边的代码,我看不到任何东西,在进行以下设置后,这对我来说非常好

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链接上进行验证