原有认证流程
- 客户端发送认证信息。
- 服务器接收并生成Session,存在服务器端。
- 服务器返回SessionId。
- 后面的请求,都携带SessionId。
痛点
- Session保存在服务端,服务端压力大。
- 集群部署时,需要做Session集群。
jwt优势
- Jwt存储在客户端。
- 适合分布式。
- 简洁,数据量小。
- 自包含,可以存放公共的用户信息。
jwt 的结构
header.payload.singnature
1. header 标头
2. payload 有效载荷
3. Singnature 签名
header
{
"alg":"HS256",
"typ":"JWT"
}
标头通常由两部分组成,alg: 加密算法,如:HMAC,SHA256或RSA
再由Base64编码header的json内容,形成header字符串。
payload
{
}
有效负载,就是业务希望存储的内容。
也是由Base64编码PayLoad的json内容,形成payload字符串。
signature
由编码后的Header和payload和我们提供的唯一秘钥,然后使用header中的签名算法进行签名。形成signature。
代码部分
生成token
JWT.create().....
验证token
JWTVerifier jwtVerifier = JWT.require(xxx).build();
DecodedJWT data = jwtVerifier.verify(token); //验证token
data.getClaim(xxx);// 获取payload里面是数据
整合springboot
待补充......