概述
JWT简称JSON Web Token,也就是通过JSON形式作为Web应用中的令牌,用于在各方之间安全地将信息作为JSON对象传输。在数据传输过程中还可以完成数据加密、签名等相关处理。n多种算法加密系统和系统信息交换。是web安全验证主流。JWT规定了数据传输的结构,一串完整的JWT由三段落组成,每个段落用英文句号连接(.)连接,他们分别是:Header、Payload、Signature。
JWT结构
Header
JWT头是一个描述JWT元数据的JSON对象,alg属性表示签名使用的算法,默认为HMAC SHA256(写为HS256);typ属性表示令牌的类型。最后,使用Base64 URL算法将上述JSON对象转换为字符串保存。
Payload
Payload是有效负载,其中包含声明。声明是有关实体(通常是用户)和其他数据的声明。使用Base64编码组成JWT结构的第二部分。负载中包含了所有用户所需要的信息,避免了多次查询数据库。
Signature
密钥(secret)
HMACSHA256(base64UrlEncode(header)+"."+base64UrlEncode(payload),secret);
前面两部分都是使用Base64进行编码的,即前端可以解开知道里面的信息。Signature需要使用编码后的 header和payload以及我们提供的一个密钥,然后使用header中指定的签名(HS256)进行签名。签名的作用是保证JWT没有被篡改。
JWT生成token代码
Calendar calendar=Calendar.getInstance();
calendar.add(Calendar.SECOND,60);
String sign = JWT.create()
.withClaim("userId", "root")
.withClaim("username",123)
.withExpiresAt(calendar.getTime())
.sign(Algorithm.HMAC256("user"));
System.out.println(sign);
对token进行验证
JWTVerifier user = JWT.require(Algorithm.HMAC256("user")).build();
DecodedJWT verify = user.verify(sign);
System.out.println(verify.getClaim("userId"));
System.out.println(verify.getClaim("username"));
JWT工具类代码如下
public class JwtUtils {
private static final String SECRET = "hello";/**
* 生成token
* @param payload token携带的信息
* @return token字符串
*/
public static String generateToken(Map<String,String> payload){
// 指定token过期时间
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.HOUR, 24); // 24小时JWTCreator.Builder builder = JWT.create();
// 构建payload
payload.forEach(builder::withClaim);
// 指定签发时间、过期时间 和 签名算法,并返回token
String token = builder.withIssuedAt(new Date()).withExpiresAt(calendar.getTime()).sign(Algorithm.HMAC256(SECRET));
return token;
}
/**
* 解析token
* @param token token字符串
* @return 解析后的token类
*/
public static DecodedJWT decodeToken(String token){
JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256(SECRET)).build();
DecodedJWT decodedJWT = jwtVerifier.verify(token);
return decodedJWT;
}
最后
以上就是粗暴小蝴蝶为你收集整理的JWT详解的全部内容,希望文章能够帮你解决JWT详解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复