一、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中的信息。