获取和解析JWT令牌

一、JWT令牌介绍

JWT(JSON Web Tokens)是一种开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间以JSON对象的形式安全地传输信息。每个JWT令牌由三部分组成:Header(头部)、Payload(负载)和Signature(签名),它们之间用点(.)分隔。

1.Header(头部):通常包含两部分:令牌的类型(即JWT)和所使用的签名算法,如HMAC SHA256或RSA。

2.Payload(负载):包含所要传递的信息。负载可以包含多个声明(Claims),它们是关于实体(通常是用户)和其他数据的陈述。声明有三种类型:

  • Registered Claims:预定义的声明,有特定的语义,如exp(过期时间)、iss(发行人)、sub(主题)、aud(受众)等。
  • Public Claims:公共的声明,可以由使用JWT的各方自定义,如name或admin。
  • Private Claims:私有声明,是为在各方之间共享信息而创建的自定义声明。

3.Signature(签名):用于验证消息在传输过程中未被篡改,并且,对于使用私钥签名的令牌,还可以验证发送者的身份。签名的生成过程通常涉及使用头部指定的算法和密钥。

JWT的创建和验证过程通常如下:

  • 创建:首先,将头部和负载编码为Base64Url格式,然后将它们用点连接起来。接着,使用密钥和头部中指定的算法对这个连接后的字符串进行签名,最后将签名附加到字符串的末尾。
  • 验证:接收方接收到JWT后,首先对签名进行验证,确保令牌未被篡改,并且签名与使用的密钥匹配。如果验证通过,接收方可以读取负载中的声明。

JWT广泛应用于身份验证和信息交换,特别是在分布式系统和服务之间。它们可以用于单点登录(SSO)、用户会话管理和跨域身份验证等场景。由于JWT是自包含的,因此不需要查询数据库来验证令牌的有效性,这使得它们在网络应用中非常高效。然而,由于JWT可以包含敏感信息,因此通常需要通过HTTPS传输以确保安全性。

二、操作环境

win10、IDEA、JDK 17、MAVEN 3.6.0、Spring Boot 3.x(全程联网)

三、获取令牌

1.引入依赖到pom.xml

        <!--JWT令牌依赖-->
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>0.12.3</version>
        </dependency>

2.编写测试代码

    /**
     * 生成JWT令牌
     */
    @Test
    public void getJwt(){
        Map<String,Object> claims = new HashMap<>();
        claims.put("id",1);
        claims.put("username","KBL");
        String jwt = Jwts.builder()
                .setClaims(claims) //自定义内容(载荷)
                .signWith(SignatureAlgorithm.HS256, "chengxuyuanchengxuyuanchengxuyuanchengxuyuanchengxuyuan") //签名算法
                .setExpiration(new Date(System.currentTimeMillis() + 24*3600*1000)) //有效期
                .compact();

        System.out.println(jwt);
    }

注意事项:

3.运行获取JWT令牌,若是获取失败,请参考(解决无法生成JWT令牌

四、解析令牌

方式一:本地解析

1.编写解析代码

/**
     * 解析JWT令牌
     */
    @Test
    public void parseJwt(){
        Claims claims = Jwts.parser()
                .setSigningKey("chengxuyuanchengxuyuanchengxuyuanchengxuyuanchengxuyuan")//指定签名密钥(必须保证和生成令牌时使用相同的签名密钥)
                .build()
                .parseClaimsJws("eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwidXNlcm5hbWUiOiJLQkwiLCJleHAiOjE3Mjc3NzkxNTR9.7Nt1IbfAZ52PKW5cjjbjr3oND9iaJxvGFO5w5g3uNV8")
                .getBody();

        System.out.println(claims);
    }

注意事项:要和第三步获取令牌的信息对应起来,以免报错

2.运行测试代码解析JWT令牌

方式二:官网解析 

1.进入官网:JSON Web Tokens - jwt.io

2.选择加密算法:

3.左栏输入获取的JWT令牌,右栏可以看到解析的结果(可以看到结果和方式一一致)

以上就是关于如何获取和解析JWT令牌的方式,感谢各位看官的观看,下期见,谢谢~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值