概念
JSON Web Token
本质上就是一串字符串,一串包含了很多信息的字符串令牌
拥有三个部分
头部
-包含加密算法和令牌类型
{
"alg":"算法名称",
"type":"JWT"
}
负载
-包含数据和信息-七个官方默认-也可以自己定义内容
{
iss:发行人
exp:到期时间
sub:主题
aud:用户
nbf:在此之前不可用
iat:发布时间
jti:JWT ID用于标识该JWT
}
签名
-可以保护数据不被篡改
java-jwt
jwt在java中的应用
token验证
1.收到用户客户端输入的用户名和密码的登录请求
2.验证通过
3.返回给用户客户端一个生成的token
4.用户客户端收到token后存储在客户端-localstorage/cookies
5.用户客户端每次请求后端服务时都会携带token-在头部信息header中携带
6.后端服务接受token,验证通过则返回给请求的数据,否则请求失败
在java应用中
-验证通过时:创建token
-后端请求时:解析token
创建token
1.创建头部
创建map集合,将头部信息放进去
-Map map = new HashMap<>()
map.put("als","加密方式")
map.put("typ","JWT")
2.创建负载
声明加密算法和使用的公钥信息--加盐
Algorithm algorithm = Algoritem.HMAC265("szr")
创建token,加入各种信息
String token = JWT.created().
//签发人
withIssur("szr").
//受众
withAudience("自定义").
//主题
withSubject("szr").
//签发时间-生成时间-当前时间
withIssuedAt(new Date()).
//过期时间-token时效性-不能一直有效-一小时
withExpiresAt(System.currentTimeMillis() + 1000 * 60 * 60).
//自定义内容
withClaim("name","szr").
//加盐
sign(algorithm)
解析token
//根据加盐内容和公钥获取内容
JWTVerifier szr = JWT.require(algorithm).withIssuer("szr").build();
DecodedJWT dec = szr.verify("获取到的token");
String name = dec.getClaim("name").asString();
//结果为
name=szr