获取和解析JWT令牌

devtools/2024/10/10 23:53:10/

一、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.编写测试代码

java">    /*** 生成JWT令牌*/@Testpublic 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.编写解析代码

java">/*** 解析JWT令牌*/@Testpublic 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令牌的方式,感谢各位看官的观看,下期见,谢谢~


http://www.ppmy.cn/devtools/122006.html

相关文章

MongoDB聚合操作及索引底层原理

目录 链接:https://note.youdao.com/ynoteshare/index.html?id=50fdb657a9b06950fa255a82555b44a6&type=note&_time=1727951783296 本节课的内容: 聚合操作: 聚合管道操作: ​编辑 $match 进行文档筛选 ​编辑 将筛选和投影结合使用: ​编辑 多条件匹配: …

Python环境安装教程

文章目录 一、搭建Python环境1.官网下载Python2.安装Python3.检验是否安装成功 二、安装pip1.检验是否有pip2.pip升级3.模块安装4.检验模块是否安装成功5.番外&#xff1a;pip做了什么&#xff1f; 本教程是安装Windows环境下Python3.7.4 一、搭建Python环境 1.官网下载Python…

大厂面试真题-Synchronized和ReentrantLock怎么选

在选择synchronized和ReentrantLock时&#xff0c;我们需要考虑多个方面&#xff0c;包括它们的特点、性能、以及具体的使用场景。以下是一些关键的比较点和建议&#xff1a; 1. 功能特性 锁的公平性&#xff1a; synchronized是非公平锁&#xff0c;它无法控制线程的执行顺序…

Leetcode 第 417 场周赛题解

Leetcode 第 417 场周赛题解 Leetcode 第 417 场周赛题解题目1&#xff1a;3304. 找出第 K 个字符 I思路代码复杂度分析 题目2&#xff1a;3305. 元音辅音字符串计数 I思路代码复杂度分析 题目3&#xff1a;3306. 元音辅音字符串计数 II思路代码复杂度分析 题目4&#xff1a;33…

深入计算机语言之C++:C到C++的过度

&#x1f511;&#x1f511;博客主页&#xff1a;阿客不是客 &#x1f353;&#x1f353;系列专栏&#xff1a;从C语言到C语言的渐深学习 欢迎来到泊舟小课堂 &#x1f618;博客制作不易欢迎各位&#x1f44d;点赞⭐收藏➕关注 一、什么是C C&#xff08;c plus plus&#xff…

【GEE学习第三期】GEE常用函数总结

【GEE学习第三期】GEE常用函数总结 数据统计类ee.List.sequence函数 图像处理类ee.Geometry类‌defaultVisualizationVis函数 数据输入输出数值与绘图导出影像 参考 数据统计类 ee.List.sequence函数 用法如下&#xff1a; ee.List.sequence &#xff08;开始&#xff0c;结…

8.使用 VSCode 过程中的英语积累 - Help 菜单(每一次重点积累 5 个单词)

前言 学习可以不局限于传统的书籍和课堂&#xff0c;各种生活的元素也都可以做为我们的学习对象&#xff0c;本文将利用 VSCode 页面上的各种英文元素来做英语的积累&#xff0c;如此做有 3 大利 这些软件在我们工作中是时时刻刻接触的&#xff0c;借此做英语积累再合适不过&a…

用Python和OpenCV实现人脸识别:构建智能识别系统

解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 人脸识别技术在现代社会的各个领域得到了广泛应用,从智能手机的面部解锁到公共场所的安全监控,人脸识别已经成为一项日益重要的技术。本教程将指导你使用Python中的OpenCV库来构建一个简单的人脸检测与识别系统…