怎么创建一个网站卖东西,巢湖网站建设电话,网站备案成功后,钉钉小程序开发平台JWT简介
JWT官网#xff1a;https://jwt.io/ JSON Web令牌#xff08;JWT#xff09;是一个开放标准#xff08;RFC 7519#xff09;#xff0c;它定义了一种紧凑而自包含的方式#xff0c;用于在各方之间以JSON对象的形式安全地传输信息。此信息可以验证和信任#x…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.2jjwt的版本是0.9.1jjwt.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为HS256body就是负载信息除了在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{algHS256},body{userNametestName, exp1727661494, userIdtest001, iat1727657894},signaturem6ufuqgMYXrnjEutgT5CEhJs7VmVvee9XYIhqJoEhNs
2024-09-30 08:58:14,166 INFO o.a.j.u.BeanShellTestElement: claims_parse: {userNametestName, exp1727661494, userIdtest001, iat1727657894}