什么是JWT
token 认证,前后端分离的保护机制,前后端的信息传递,接收方是要验证,有数字签名的,以JSON 的形式建立令牌。
数字签名算法
ECDSA ,HMAC
使用场景
系统之间的传递数据,数字的签名和加密,信息交换,javaweb安全验证。
单点登录的系统,开销很小,完成跨域。
传统的session验证
信息交换,session 存储信息,http协议无状态,给协议记录状态,每个用户都有自己的session 保存在内存中。
限制了分布能力 ,集群架构受到限制。
解耦后,增加部署复杂型,前端服务nginx,路由网关,代理层网关。
作用
拦截漏洞(伪造攻击),前后端分离。
解决session 内存问题
令牌保存浏览器端,携带令牌,系统中合法令牌。整个格式处理完后。
自包含,分布式微服务,解决session 内存的占用问题,json令牌。后端验证。
构成
三段组成
标头,Payload ,singnature 。
alg HS256, base64的编码。
{
"alg":"HS256".
"typ":"JWT"
}
PAYLOAD
{
"SUB":"1234567890",
"NAME":"John Doe",
"admin": true
}
信息安全
敏感信息泄露,原密码修改。
Payload不要放密码等敏感信息。
非敏感信息,认证授权
spring的应用
1、引入依赖
libraries-io
JWT
withClaim , sign
asInt()
先验证签,解码,过期时间,过期payload,
声明异常
2、生成令牌,验证令牌,
生产环境,
map.forEach((k,v)->{
}
);
3、创建过期时间,
4、创建jwt builder
5、payload 遍历
withEXpiresAt(instance.getTime())
.sign(Algorithm.HMAC256(sign))
return token;
/验证token
JWT.require(Algorithm.HMAC256(sign).build
.verify(token))
springboot整合JWT使用
一、
1、数据库用户认证 db
2、mybaits lombok mysql
3、配置文件,数据类型,jwt,
4、写实体,dao接口,登录接口,service接口
5、业务层实现,注入DAO
6、控制器,加日志,接收name,password.
User user。getName()
7、热部署
e.printStackTrace();
e.printStackTrace();
e.printStackTrace();
二、
拦截器,网关
JWTInterceptor implements HandlerInterceptor
配置,webmvcConfigurer
AOP+注解+拦截器
基于客户端管理
localstore sessionstore
}