网站开发的硬件设备,关于网站设计的职业,wordpress百度熊掌号,江苏建设人才证书查询Jwt令牌介绍
Jwt令牌主要用于登录操作中#xff0c;常用来进行身份认证 jwt令牌分为三个部分#xff08;不同部分之间用点分割#xff09;#xff1a;
由base64编码的头部信息#xff0c;其中储存着Jwt所使用的摘要算法由base64编码的中间部分用户自定义信息#xff0c…Jwt令牌介绍
Jwt令牌主要用于登录操作中常用来进行身份认证 jwt令牌分为三个部分不同部分之间用点分割
由base64编码的头部信息其中储存着Jwt所使用的摘要算法由base64编码的中间部分用户自定义信息用户可以在中间部分进行数据传送对第一部分和第二部分的摘要信息摘要算法使用第一部分所说明的算法
三部分的示例
eyJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoi6YeR5bq4IiwiaWQiOjEsImV4cCI6MTcwOTM4OTExMywidXNlcm5hbWUiOiJqaW55b25nIn0.uhrPL_fN_DI6jl25YecbGid7YyIq4jBhQYLbWNUltdg通过base64解析后的结果
{alg:HS256}
{name:金庸,id:1,exp:1709389113,username:jinyong}
.|9v凜lh팈mcT就长这样在格式上前面两部分用json传送最后一部分为摘要 注意 这里使用的不是加密算法而是摘要算法攻击者可以看到Jwt令牌中所传递的值但是由于摘要算法的存在攻击者不能修改或者伪造值。不可用于传输机密数据
代码实现
public class JWTUtils {private static Long expire 43200000L;private static String key zhang;// 生成Gwt令牌public static String genGWT(MapString, Object claims) {String jwt Jwts.builder().signWith(SignatureAlgorithm.HS256, key).setClaims(claims).setExpiration(new Date(System.currentTimeMillis() expire)).compact();return jwt;}// 解析令牌public static MapString, Object parseJwt(String jws) {MapString, Object claims Jwts.parser().setSigningKey(key).parseClaimsJws(jws).getBody();return claims;}}代码简单解释
signWith设置加密算法和秘钥setClaims设置中间传送内容setExpiration设置令牌过期时间compact这个不知道干啥的大佬看见之后麻烦在评论区解答一下~ setSigningKey传入秘钥parseClaimsJws传入字符串注意这里是jws而不是jwt JSON Web StringgetBody得到中间自定义的数据
写在后面
关于算法博主本身就是学安全的对这个比较感兴趣这里的算法为对称算法而不是公钥算法非对称为什么不把数据加密而是进行摘要机密数据交给post方式进行传输post有对应的加密jwt负责非机密数据故不需要加密。