📜  JWT 令牌有效期多久?

📅  最后修改于: 2022-05-13 01:56:26.747000             🧑  作者: Mango

JWT 令牌有效期多久?

JSON Web 令牌是一种在互联网上传输或交换数据的高效、安全且最常用的方法。一般用于应用程序中的认证和授权。身份验证的工作流程是我们在服务器上生成令牌并将其发送回客户端,用于服务器上的进一步请求,现在讨论的重点是这个 jwt 令牌的有效期是多久? 表示在多长时间之后服务器将不考虑客户端发送的令牌。让我们首先了解如何创建 JWT 令牌。

jsonwebtoken库的sign()方法用于创建一个令牌,该令牌接受某些信息作为参数对象并返回生成的令牌。

句法:

jwt.sign(payload, secretOrPrivateKey, [options, callback])

参数:

  • 有效载荷: 是令牌中要加密的信息
  • 秘钥: 是签名,或者可以说是用于识别令牌真实性的代码。
  • 选项:在选项中,我们传递有关令牌的某些信息,这就是我们提供令牌有效期限的地方。

返回类型:此方法将返回 JWT 令牌

示例:创建一个 10 分钟到期的令牌。

第一步:创建节点项目

由于我们正在处理节点库,因此创建节点项目是强制性步骤,请在终端中编写 npm init。它将要求您对项目进行一些配置,这些配置非常容易提供。

npm init

第二步:安装“ jsonwebtoken ”包

在编写 JWT 代码之前,我们必须安装包,

npm install jsonwebtoken

这将是我们安装后的项目结构,其中 node_modules 包含模块,而 package.json 存储项目的描述。此外,我们创建了一个app.js文件来编写整个代码。

项目结构:

第 3 步:创建具有明确过期时间的JWT 令牌

注册令牌到期的方法有两种,如下所示,并附有说明。

  • 创建到期时间的表达式。
  • 在方法的 options 参数中提供 JWT 令牌的到期时间。

方法 1:存在一个密钥exp ,我们可以在其中提供自纪元以来的秒数,并且令牌将在这些秒内有效。

Javascript
// Importing module
const jwt = require('jsonwebtoken');
const token = jwt.sign({
 
    // Expression for initialising expiry time
    exp: Math.floor(Date.now() / 1000) + (10 * 60),
    data: 'Token Data'
}, 'secretKey');
const date = new Date();
console.log(`Token Generated at:- ${date.getHours()}
                               :${date.getMinutes()}
                               :${date.getSeconds()}`);
 
// Printing the JWT token
console.log(token);


Javascript
// Importing module
const jwt = require('jsonwebtoken');
const token = jwt.sign({
 
    // Assigning data value
    data: 'Token Data'
}, 'secretKey', {
    expiresIn: '10m'
});
const date = new Date();
console.log(`Token Generated at:- ${date.getHours()}
                               :${date.getMinutes()}
                               :${date.getSeconds()}`);
// Printing JWT token
console.log(token);


Javascript
//Importing module
const jwt = require('jsonwebtoken');
// JWT token
const token =
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2Mzc4NjgxMzMsImRhdGWf"
 
const date = new Date();
// Verifing the JWT token
jwt.verify(token, 'secretKey', function(err, decoded) {
    if (err) {
        console.log(`${date.getHours()}:${date.getMinutes()}
                                       :${date.getSeconds()}`);
        console.log(err);
    }
    else {
        console.log(`${date.getHours()}:${date.getMinutes()}
                                       :${date.getSeconds()}`);
        console.log("Token verifified successfully");
    }
});


输出:

方法2:在这种方法中, 我们可以将时间传递给选项中的expiresIn键,它需要令牌保持有效的秒数或持续时间字符串为'1h''2h''10m'等。

Javascript

// Importing module
const jwt = require('jsonwebtoken');
const token = jwt.sign({
 
    // Assigning data value
    data: 'Token Data'
}, 'secretKey', {
    expiresIn: '10m'
});
const date = new Date();
console.log(`Token Generated at:- ${date.getHours()}
                               :${date.getMinutes()}
                               :${date.getSeconds()}`);
// Printing JWT token
console.log(token);

输出:

第 4 步:根据有效期验证令牌

我们已经成功生成了令牌,现在是时候验证代码是否按预期方式工作了。

Javascript

//Importing module
const jwt = require('jsonwebtoken');
// JWT token
const token =
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2Mzc4NjgxMzMsImRhdGWf"
 
const date = new Date();
// Verifing the JWT token
jwt.verify(token, 'secretKey', function(err, decoded) {
    if (err) {
        console.log(`${date.getHours()}:${date.getMinutes()}
                                       :${date.getSeconds()}`);
        console.log(err);
    }
    else {
        console.log(`${date.getHours()}:${date.getMinutes()}
                                       :${date.getSeconds()}`);
        console.log("Token verifified successfully");
    }
});

10分钟前:

输出 1:在这里,我们在生成令牌 10 分钟之前进行检查,正如预期的那样,else 代码块将起作用。

10分钟后:

输出 2 :这里我们检查令牌是否过期,在这种情况下会抛出TokenExpirationError

结论:看到这两个输出和创建token的方法后,我们可以分析token的持续时间是如何声明的,以及它保持有效的时间。