JWT数据加密

  |  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 登录加密
const jwt = require('jsonwebtoken');
(async () => {
// 加密
const token = jwt.sign({ 'foo': 'bar' }, 'test_123', { 'expiresIn': '2 days' });
console.log(token);
const token1 = jwt.sign({ 'foo': 'bar' }, 'test_123', { 'expiresIn': '1h' });
console.log(token1);
console.log(token1 === token);

try {
const data = jwt.verify(token, 'test_123');
console.log(data);
let { exp, iat } = data;
console.log(exp - iat);
} catch (error) {
console.log('error=============>', error);
}
})();

JWT 简介

(1)JWT 默认是不加密,但也是可以加密的。生成原始 Token 以后,可以用密钥再加密一次。

(2)JWT 不加密的情况下,不能将秘密数据写入 JWT。

(3)JWT 不仅可以用于认证,也可以用于交换信息。有效使用 JWT,可以降低服务器查询数据库的次数。

(4)JWT 的最大缺点是,由于服务器不保存 session 状态,因此无法在使用过程中废止某个 token,或者更改 token 的权限。也就是说,一旦 JWT 签发了,在到期之前就会始终有效,除非服务器部署额外的逻辑。

(5)JWT 本身包含了认证信息,一旦泄露,任何人都可以获得该令牌的所有权限。为了减少盗用,JWT 的有效期应该设置得比较短。对于一些比较重要的权限,使用时应该再次对用户进行认证。

(6)为了减少盗用,JWT 不应该使用 HTTP 协议明码传输,要使用 HTTPS 协议传输