JWT如何创建和校验呢?

戚薇 Java教程 发布时间:2023-05-11 16:42:51 阅读数:5297 1
下文笔者讲述JWT创建和校验的方法及示例分享

JWT简介

JWT是一种紧凑的
   URL安全的用于两端传递的声明
    在JWS的结构中,JWT的声明会被加密成一个JSON对象
     当做payload
   他们会使这些声明被数字化签名
     或被消息认证码(类似散列)/加密算法完整地保护

JWT构造

JWT分为三段数据
   分别是head/payload/sign
    每段数据采用.号连接

jwtToken = 
   base64url(header Json串) + . +
   base64url(payload Json串) + . +
    加密算法(base64url(header Json串) + . +
	base64url(payload Json串), 秘钥)

以HMACSHA256加密算法为例

header:
{
  "alg": "HS256",
  "typ": "JWT"
}
payload:
{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
}

sign:
HMACSHA256(base64UrlEncode(header) + "." +base64UrlEncode(payload), secret)

创建token

long currentTime = System.currentTimeMillis();
        long exp = currentTime + 1000*60;// 设置有效时间为1分钟
        // 创建JwtBuilder对象
        JwtBuilder jwtBuilder = Jwts.builder()
                // 唯一ID:{"jti": "888"}
                .setId("888")
                // 主体:用户{"sub":"Rose"}
                .setSubject("Rose")
                // 创建日期{“ita”: ""}
                .setIssuedAt(new Date())
                // 签名
                // 参数1: 算法
                // 参数2: 盐
                .signWith(SignatureAlgorithm.HS256, "XXXX")
                // 设置失效时间
                .setExpiration(new Date(exp));
        // 获取token
        String token = jwtBuilder.compact();
        System.out.println(token);

        // Base64解密
        String[] split = token.split("\\.");
        System.out.println(Base64Codec.BASE64.decodeToString(split[0]));// 头部
        System.out.println(Base64Codec.BASE64.decodeToString(split[1]));// 载荷
        // 无法解密
        System.out.println(Base64Codec.BASE64.decodeToString(split[2]));

解析token

String token = "ey*******************************";
// 解析token获取负载中的声明对象
Claims claims = (Claims) Jwts.parser()
		// 密钥必须要与加密时候一致
		.setSigningKey("XXXX")
		.parse(token)
		.getBody();

System.out.println("ID => " + claims.getId());
System.out.println("sub => " + claims.getSubject());
System.out.println("date => " + claims.getIssuedAt());
 
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaCourse/202305/6412.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者