作者:雅芳07866 | 来源:互联网 | 2023-07-03 16:13
JWT
jwt组成
一个JWT实际上就是一个字符串,它由三部分组成,头部、载荷与签名(xxx.yyy.zzz)。
-
Header:头部,通常头部有两部分信息:
- 声明类型type,这里是JWT(type=jwt)
- 加密算法,自定义(rs256/base64/hs256)
我们会对头部进行base64加密(可解密),得到第一部分数据
-
Payload:载荷,就是有效数据,一般包含下面信息:
- 用户身份信息-userid,username(注意,这里因为采用base64加密,可解密,因此不要存放敏感信息)
- 注册声明:如token的签发时间,过期时间,签发人等
这部分也会采用base64加密,得到第二部分数据
-
Signature:base64加密,签名,是整个数据的认证信息。一般根据前两步的数据,再加上服务的的密钥(secret,盐)(不要泄漏,最好周期性更换),通过加密算法生成。用于验证整个数据完整和可靠性
引入依赖
com.auth0java-jwt3.10.3
生成token
static final String sign = "123dadasdasfa";
public static String tokenCreate(String username, String id){Calendar instance = Calendar.getInstance();instance.add(Calendar.DATE,7); String token = JWT.create().withClaim("username", username) .withClaim("id", id) .withExpiresAt(instance.getTime()) .sign(Algorithm.HMAC256(sign)); System.out.println(token);return token;
}
数据验证
用户登录
public static String login(String username, String password){JwtUtil jwtUtil = new JwtUtil();String token = jwtUtil.tokenCreate(username, password);System.out.println(token);return token;
}
用户认证
@Test
void verify() {String token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6IjIyIiwiZXhwIjoxNjMwOTMwODM4LCJ1c2VybmFtZSI6ImJlcCJ9.dj8jUxXnuzUrVLEIRLqU3k4NmpLjNjg6Kuo6GUTlWhY";JwtUtil jwtUtil = new JwtUtil();DecodedJWT verify = jwtUtil.verify(token);System.out.println(verify.getClaim("username").asString());System.out.println(verify.getClaim("id").asString());
}