Jwt(Json Web token)
一、 传统的token
1.Session 存放服务器端—Session ID
Session示意图
2.Token+Redis
token示意图
Session缺点集群无法共享—redis 中
Token类似于Session lD
Token依赖于Redis真实token存放value值
使用Token缺点:每次都需要根据token查询真实内容,对服务器端压力就非常大。|
Jwt先学习json、token(加密算法对称非对称加密算法)
二、jwt(JSON WEB Token)
-
JSON WEB Token 常缩写为JWT,一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,使符合资格者从资源服务器获取资源,
-
也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。
-
jwt官网:
https://jwt.io/ -
客户端每次访问后端请求的时候,会传递该token在请求中,服务器端接收到该token之后,从redis中查询如果存在的情况下,则说明在有效期内,如果在Redis中不存在的情况下,则说明过期或者token错误。
三、Jwt底层组成部分
- 头部;
header
{
"alg": "HS256"
}
在 header描述jwt的 Payload加密方式
Typ=“jwt” —类型为jwt
Alg:“HS256” --加密算法为hs256
- Payload(载荷)装载的数据;
Payload就是jwt_存放的数据内容
{
"jti": "66",
"sub": "mayikt",
"iat": 1641455226,
"userName ": "yushengjun644"
}
相当于Token对应存放在 Redis或者数据库中的数据。
携带存放的数据用户名称、用户头像之类
注意敏感数据手机号码、密码等不宜存放,标准中注册的声明(建议但不强制使用):
iss: jwt签发者
sub: jwt所面向的用户aud:接收jwt的一方
exp: jwt的过期时间,这个过期时间必须要大于签发时间
nbf:定义在什么时间之前,该jwt都是不可用的.
iat: jwt的签发时间
jti: jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击。
- 验证签名;
防止篡改payload中数据
Jwt 与token最大的区别:
四、JWT优缺点优点
- 优点:
1.无需再服务器存放用户的数据,减轻服务器端压力
2.轻量级、json风格比较简单
3.跨语言 - 缺点:
Jwt一旦生成后期无法修改:
1.无法更新token有效期
2.无法销毁一个token
五、JWT的应用场景
前端分离项目、(移动app、小程序、H5)