织梦网站广告,jquery win8风格企业网站模板,广州网站建设知名乐云seo,wordpress标签模板下载目录 一、JWT的概述
1.什么是JWT#xff1f;
2.JWT的用户认证
3.JWT解决了什么问题#xff1f;
4.关于JWT中的签名如何理解#xff1f;
5.JWT的优势
二、JWT的结构
1.令牌的组成#xff1a;
2.JWT的工具类
3.JWT所需的依赖
4.JWT登录生成Token的原理
三、JWT的自…目录 一、JWT的概述
1.什么是JWT
2.JWT的用户认证
3.JWT解决了什么问题
4.关于JWT中的签名如何理解
5.JWT的优势
二、JWT的结构
1.令牌的组成
2.JWT的工具类
3.JWT所需的依赖
4.JWT登录生成Token的原理
三、JWT的自校验
1.什么是JWT的自校验 一、JWT的概述
1.什么是JWT JWT是一个含签名并且携带用户相关信息的加密串用户输入相关信息进行登录的时候如果信息验证成功会生成一个JWT(Token令牌)并且将这个token返回给前端保存到本地当进行其他的请求api的时候将这个Token带给后端并且拦截器对请求进行拦截验证这个Token,如果验证Token无误则放行这个请求进行相应的业务逻辑处理显示数据有误则返回错误信息跳转登陆界面 2.JWT的用户认证 3.JWT解决了什么问题 授权因为JWT中包含用户的相关信息如用户名或者用户ID,所以通过JWT的用户信息服务可以确定用户的身份一旦用户的身份验证成功后系统就会授予它们一组权限来访问资源 信息交换JWT可以签名所以可以验证数据在传输过程中是否被篡改或伪造这有助于去报信息的真实性和完整性 4.关于JWT中的签名如何理解 想象一封信在传输过程中你希望确保这封信没有被别人篡改。为了做到这一点你可以在信封上盖上你的个人印章签名这个印章只有你知道如何制作。当收信人收到信时他可以检查印章是否有效以确定信件没有被任何人打开或篡改过。 在网络通信中签名密码就像这个个人印章。它是一个秘密的密钥只有发送者和接收者知道。发送者使用签名密码对数据进行签名生成一个数字签名这个数字签名就像印章。接收者使用相同的密钥来验证数字签名以确保数据在传输过程中没有被篡改或伪造。这有助于确保数据的完整性和真实性。 5.JWT的优势 1.简洁可以通过URL, POST 参数或者在 HTTP header 发送因为数据量小传输速度快 2.自包含:负载中包含了所有用户所需要的信息避免了多次查询数据库 3.自校验对token可以自己校验是否过期 二、JWT的结构
1.令牌的组成 标头(Header)标头通常由两部分组成令牌的类型即JWT和所使用的签名算法 有效载荷(Payload)设置用户自定义信息过期时间面向的用户 接收方签发时间 签名(Signature)使用 header 中指定的签名算法HS256进行签名。签名的作用是保证 JWT 没有被篡改过。 2.JWT的工具类
public class JWTUtils {//这个作为JWT的签名密钥private static String signddz;//封装了创建Token的操作public static String createToken(MapString,String map){//1.设置超时时间、确保操作不会无限期持续下去提高系统的安全性和效率Calendar calendarCalendar.getInstance(); //创建一个calendar对象calendar.add(Calendar.DATE,7); //设置JWT过期时间7天//2.创建JWTbuilder对象这个对象用来构建JWT的JWTCreator.Builder builder JWT.create();//3.通过JWTbuild对象构建TokenString tokenbuilder// .withHeader(map) //设置标头可以不设置有默认值.withClaim(name,map.get(name)).withClaim(pwd,map.get(pwd)) //设置用户自定义信息负载.withExpiresAt(calendar.getTime()) //设置令牌过期时间.sign(Algorithm.HMAC256(sign)); //设置用户签名return token; //将token令牌返回}//获取签名的方法public static Algorithm getSignature(){return Algorithm.HMAC256(sign);}//token的校验public static DecodedJWT require(String token){return JWT.require(getSignature()).build().verify(token);}//获取token中的数据public static Claim getPayload(String token,String key){return require(token).getClaim(key);}
}3.JWT所需的依赖 dependencygroupIdcom.auth0/groupIdartifactIdjava-jwt/artifactIdversion3.4.0/version/dependency
4.JWT登录生成Token的原理
当用户在登录表单输入信息后服务端验证用户名密码正确服务端会签发一个JWT(Token)。
JWT分为三个部分它们之间通过.连接第一部分是头第二部分是负载它们都是通过Base64编码生成字符串然后通过.连接
签发token就是通过Base64编码将标头与载荷用户揉入的数据生成字符串再通过签名算法与密钥生成一个签名将这三部分通过.连接起来就是JWT令牌了
三、JWT的自校验
1.什么是JWT的自校验
JWT的自校验其实就是因为Base64是一种编码方式而不是加密方式所以通过Base64编码的数据也可以通过Base64进行解码因为头和载荷都是通过Base64编码的所以可以解码出来所以客户端传入一个token通过.分割出头和负载然后解码在通过这个头、负载以及签名算法和只有服务端知道的密钥生成一个签名将这个签名与传入的token的签名做一个比对这样就可以校验这个签名是否被篡改过因为一旦传过来的token被篡改过那么根据头、负载、签名算法、密钥生成的签名,就会与传过来的签名不一致这样就保障了数据的安全性
例如头是A 负载是B 签名算法和密钥在服务端是一样的 得到的签名是C 所以Token是 A.B.C
一旦对这个Token进行篡改 如 A.B.D 这个token传过去的头是A 负载是B 生成的签名是 C 发现根据传过来的头和负载生成的签名C与传过来的签名D不一致所以则判断Token有问题