您的位置:

JWT与Token的区别详解

一、JWT与Token区别

JWT全称为JSON Web Token,是一种用于身份验证的标准。而Token一般指的是验证/身份标识。因此,可以将JWT看作是Token的一种特定实现。

Token的通用解释是服务器用于识别特定用户身份的唯一字符串。它可以是一串随机字符,也可以是一个加密的字符串。Token通常包含一些元数据,用于描述与其相关联的身份验证信息,例如过期时间、所属用户等。

而JWT则是一个特殊的Token,在创建和验证Token时使用的特定规范。与使用传统Token相比,使用JWT的优点是可以在服务器和客户端之间安全地共享身份验证信息,并保持标准和可互操作性。

二、JWT和Token的区别及优缺点

1、JWT的优点:

a)使用JWT能够在不同的系统之间安全地共享信息;

b)天然支持跨域;

c)使用JWT能够以更健康的方式提供跨域身份验证。

2、JWT的缺点:

a)默认情况下,JWT存储了一定数量的用户信息,若是泄露,则会导致身份被盗;

b)使用JWT需要在服务器上密钥才能进行解码,因此需要安全地保存密钥,防止密钥被盗用。

3、Token的优点:

a)Token可以直接存储在客户端,并且不需要在服务器端存储密钥;

b)Token可以支持多种加密方式,包括摘要、对称和非对称加密。

4、Token的缺点:

a)Token需要每个请求都在服务器端进行验证,相对于JWT消耗更多的计算资源;

b)由于Token可能是服务器端的一个无法预知的随机字符串,因此需要进行安全性检查,防止攻击者篡改。

三、JWT怎样让Token失效

const jwt = require('jsonwebtoken');

//设置过期时间为30分钟
const expireTime = Math.floor(Date.now() / 1000) + (30 * 60);

//创建JWT Token
const token = jwt.sign({
  data: 'Sample token data'
}, 'secret', { expiresIn: expireTime });

//使Token失效
setTimeout(() => {
  jwt.verify(token, 'secret', (err, decoded) => {
    if (err) {
      console.log('Token已失效');
    } else {
      console.log('Token仍然有效');
    }
  });
}, 31 * 60 * 1000);

四、JWT判断Token是否过期

const jwt = require('jsonwebtoken');

//设置过期时间为30分钟
const expireTime = Math.floor(Date.now() / 1000) + (30 * 60);

//创建JWT Token
const token = jwt.sign({
  data: 'Sample token data'
}, 'secret', { expiresIn: expireTime });

//判断Token是否过期
jwt.verify(token, 'secret', (err, decoded) => {
  if (err) {
    console.log('Token已过期');
  } else {
    console.log('Token仍然有效');
  }
});

五、Token和JWT的区别

1、存储方式不同:Token一般存储在服务器端;JWT则通常放置在客户端本地存储中,如localStorage或Cookie中。

2、使用范围不同:Token可以是任何字符串,与特定规范无关,因此可以在各种应用程序中使用。而JWT则是基于JSON Web Token规范,主要用于Web应用程序和API身份验证。

3、使用安全性不同:由于JWT存储在客户端,因此需要更加小心地保护密钥,以确保没有人可以篡改JWT。而仅存储在服务器上的Token不需要相同的保护措施,因为攻击者无法获得Token中的信息。