Jmeter生成JWT token

embedded/2024/10/9 2:47:16/
JWT简介

JWT官网:https://jwt.io/
JSON Web令牌(JWT)是一个开放标准(RFC 7519),它定义了一种紧凑而自包含的方式,用于在各方之间以JSON对象的形式安全地传输信息。此信息可以验证和信任,因为它经过了数字签名。JWT可以使用密钥(使用HMAC算法)或使用RSA或ECDSA的公钥/私钥对进行签名。
JSON Web令牌由三个部分组成,即:Header、Payload、Signature,这三者由两个点(.)分隔开。通常JWT展示为:Header.Payload.Signature。

  • Header
    Header通常包含两个部分:token的类型、签名的算法。如:
    {
    “alg”: “HS256”,
    “typ”: “JWT”
    }
    这部分Header的内容会被Base64Url编码来形成JWT的第一部分。

  • Payload
    Payload包含了声明,声明是关于实体(通常是用户)和其他数据的声明。有三种类型的声明:registered claims, public claims, and private claims。

    • Registered claims是一组预定义的声明,不是强制性的,而是推荐的,以提供一组有用的、可互操作的声明。其中一些是:iss(发行者)、exp(到期时间)、sub(主题)、aud(受众)等。
    • Public Claims:这些声明可以自定义,但需要注意避免与注册声明的名称冲突。
    • Private Claims:这些声明是保留给特定的应用程序使用的,不会与其他应用程序冲突。

    比如一个有效的payload如下:
    {
    “sub”: “1234567890”,
    “name”: “John Doe”,
    “admin”: true
    }
    Payload将会被以Base64Url编码形成JWT的第二部分。

  • Signature
    Signature由Header经过Base64Url编码部分、payload经过Base64Url编码的部分和密钥组成,在此基础上由Header中指定的算法进行加密得到JWT的第三部分。
    签名用于验证消息在此过程中没有更改,并且,在使用私钥签名的令牌的情况下,它还可以验证JWT的发送者是它所说的人
    例如:如果指定的加密算法为HMACSHA256,第三部分将会这样生成:
    HMACSHA256(base64UrlEncode(header) + “.” + base64UrlEncode(payload),Secret)

    最后,把上面三个部分放到一起就得到了完成的JWT。输出是三个由点(.)分隔的Base64 URL字符串。

通过JSR223 Sampler/BeanSell取样器生成JWT

这里使用的Jmeter的版本是5.6.2,jjwt的版本是0.9.1,jjwt.jar包可以在如下地址下载:
https://nowjava.com/jar/detail/m02767305/jjwt-0.9.1.jar.html
下载后放到jmeter的 lib\ext目录下。

生成token的具体代码如下:

import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
import java.util.Map;//设置密钥,用于签名的加密
String SECRET = "123";
byte[] SECRET_KEY = SECRET.getBytes();SignatureAlgorithm HS256 = SignatureAlgorithm.HS256;  //Header中的加密算法
Date now = new Date(System.currentTimeMillis());//设置过期时间,单位为毫秒
Date expired = new Date(System.currentTimeMillis() + 3600000L);//声明,即自定义的负载信息
Map claims = new HashMap();
claims.put("userId","test001");
claims.put("userName","testName");//生成jwt
String jwt = Jwts.builder() .setClaims(claims)  //设置payload负载信息.setIssuedAt(now)   //设置token发行时间.setExpiration(expired)  //设置过期时间.signWith(HS256, SECRET_KEY)   //签名.compact();log.info("===========jwt:" + jwt);//解析jwt
jwt_parse = Jwts.parser().setSigningKey(SECRET_KEY).parseClaimsJws(jwt);
claims_parse = jwt_parse.getBody();log.info("======== jwt_parse: " + jwt_parse);
log.info("======== claims_parse: " + claims_parse);

运行打印结果如下,可以看到Header中,签名的算法即alg为HS256;body就是负载信息,除了在claims中的userName、userId外,还包含了token过期时间以及token发行时间。

2024-09-30 08:58:14,165 INFO o.a.j.u.BeanShellTestElement: ===========jwt:eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyTmFtZSI6InRlc3ROYW1lIiwiZXhwIjoxNzI3NjYxNDk0LCJ1c2VySWQiOiJ0ZXN0MDAxIiwiaWF0IjoxNzI3NjU3ODk0fQ.m6ufuqgMYXrnjEutgT5CEhJs7VmVvee9XYIhqJoEhNs
2024-09-30 08:58:14,166 INFO o.a.j.u.BeanShellTestElement: ======== jwt_parse: header={alg=HS256},body={userName=testName, exp=1727661494, userId=test001, iat=1727657894},signature=m6ufuqgMYXrnjEutgT5CEhJs7VmVvee9XYIhqJoEhNs
2024-09-30 08:58:14,166 INFO o.a.j.u.BeanShellTestElement: ======== claims_parse: {userName=testName, exp=1727661494, userId=test001, iat=1727657894}

http://www.ppmy.cn/embedded/124840.html

相关文章

Webpack 打包后文件过大,如何优化?

聚沙成塔每天进步一点点 本文回顾 ⭐ 专栏简介Webpack 打包后文件过大,如何优化?1. 代码分割(Code Splitting)1.1 概念1.2 Webpack 的 SplitChunksPlugin示例配置: 1.3 按需加载(Lazy Loading)示…

力扣之603.连续空余座位

文章目录 1. 603.连续空余座位1.1 题干1.2 准备数据1.3 思路分析1.4 解法1.5 结果截图 1. 603.连续空余座位 1.1 题干 表: Cinema ----------------- | Column Name | Type | ----------------- | seat_id | int | | free | bool | ----------------- Seat_id 是该表的自动递…

技术人生-电脑突然卡顿怎么办

我们在日常生活中经常会遇到这种问题,就是电脑突然卡顿了怎么办,我们先来谈谈电脑卡顿的常见原因 内存不足:当电脑同时运行多个程序或打开太多浏览器页面时,可能会耗尽内存资源,导致电脑变得卡顿软件冲突:…

Spring Boot:打造下一代医院管理系统

3系统分析 3.1可行性分析 通过对本医院管理系统实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本医院管理系统采用JAVA作为开发语言,Spring Boot框…

事务原理,以及MVCC如何实现RC,RR隔离级别的

事务原理 redo log 保持持久性: 首先原来的情况是我们做一组操作的时候,先去操作bufferpool缓冲区,如果没有,那么后台线程将数据页换入换出到缓冲区,然后我们对这个buffer pool进行修改,为脏页&#xff0c…

计算机网络:物理层 —— 信道复用技术

文章目录 信道信道复用技术信道复用技术的作用基本原理常用的信道复用技术频分复用 FDM时分复用 TDM波分复用 WDM码分复用 CDM码片向量基本原理 信道 信道是指信息传输的通道或介质。在通信中,信道扮演着传输信息的媒介的角色,将发送方发送的信号传递给…

面试题:Redis(二)

1. 面试题 2. MoreKey案列 事故案例 2.1 生成上如何限制key*/flushdb/flushall等危险命令的使用? 通过redis.conf配置文件中在SECURITY选项中禁用这些命令 2.2 不用key*避免卡顿那用什么? 用scan命令,类似mysql中的limit命令 语法&…

【计算机网络】Tcp/IP五层协议,Udp报文组成,Udp与Tcp的区别

Tcp/IP五层协议 TCP/IP模型是计算机网络的核心协议之一,通常被分为五层,每一层都有其独特的功能和作用。以下是TCP/IP模型的五层协议的简要描述: 物理层:这一层涉及实际的物理连接,定义了硬件传输介质的特性&#xff…