首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >获取和解析JWT令牌

获取和解析JWT令牌

作者头像
艾伦耶格尔
发布2025-08-28 14:31:03
发布2025-08-28 14:31:03
14500
代码可运行
举报
文章被收录于专栏:Java基础Java基础
运行总次数:0
代码可运行

一、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

代码语言:javascript
代码运行次数:0
运行
复制
        <!--JWT令牌依赖-->
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>0.12.3</version>
        </dependency>

2.编写测试代码

代码语言:javascript
代码运行次数:0
运行
复制
    /**
     * 生成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.编写解析代码

代码语言:javascript
代码运行次数:0
运行
复制
/**
     * 解析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令牌的方式,感谢各位看官的观看,下期见,谢谢~

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-08-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、JWT令牌介绍
  • 二、操作环境
  • 三、获取令牌
  • 四、解析令牌
    • 方式一:本地解析
    • 方式二:官网解析
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档