关于jwt的一些补充学习

去年的时候做过一个仿商城项目,在开发用户登陆以及后续需要用到用户数据的功能的时候,发现每次启动服务器,session都会清空,因此想到用浏览器本地的cookie数据存储,查阅资料的时候发现了JWT,当时就是把其当做一个签名算法,只是为了提高数据的安全性,因此当时的学习主要是学会它怎么在项目中使用,因此当时很多学习是跟着网上的博客进行,比如在搜索其实现demo的时候,直接复制它们的maven依赖,并且照着其demo照猫画虎,改一下签名密钥和算法、body的数据以及token的生成和有效时间,当时还记得因为学到把jwt的加密和解密操作单独封装到一个类JWTUtils里做解耦,自己还开心了蛮久,当然理论相关也学了,比如去jwt.io网站看了其分为三部分:
(1)Header,是描述JWT的元数据,其中alg字段表示用的加密算法,默认是HS256,typ字段表示令牌的类型。
(2)Payload,里面存放的是实际需要传递的数据。
(3)Signature,里面的值就是针对前两部分使用指定算法签名生成
在这里插入图片描述
除此之外,当时还了解到了 JOSE 、JWS、JWE、JWA、JWK,还记得 RS256 签名算法的公钥是 jwt.io 网站去请求 iss/.well-known/jwks.json 获取到的。
在这里插入图片描述
但当时的学习仅仅到这里就结束了,后面关于登录相关功能还和SA-TOKEN学过一点。
但是今天我在看牛客网的时候,发现了有条关于JWT的帖子里写到了去JWT官网找类库依赖坐标,想到我之前只是从博客简单复制,然后就想着去官网看看,这样也许对过程会更明白一点。
在这里插入图片描述

当我在官网找依赖的时候,我才发现,原来对于JAVA有六种不同的类库实现

在这里插入图片描述
对于上述描述的字段,左边中,Sign表示是否支持签名,Verify表示是否支持验签,下面七个是JWT的payload字段,表示是否支持其字段:
(1)iss (issuer):发布者
(2)sub (subject):主题
(3)aud (audience):观众,相当于接受者
(4)exp (expiration time):签名过期时间
(5)nbf (Not Before):生效时间
(6)iat (Issued At):生成签名的时间
(7)jti (JWT ID):编号
对于最后一个typ,我的理解是header的字段,这个一般都是JWT,看上面都不支持,所以这个字段应该是不能修改的。
右边表示支持的加密算法
其实单从图来看,我认为jose4j是支持最全的,不过据我目前了解到的,网上博客基本都是推荐java-jwt和jjwt,不过我也有看到推荐nimbusds-jose-jwt的,理由是可以根据oidc规范配置远程公钥地址,具体的很多细节我还没有接触到,由于即将毕业的学业压力,这一部分目前学习性价比太低,并且具体的时候如果以后到了公司里做项目,还是得根据公司团队要求来,所以今天先记录一下,以后有时间了回来再继续看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值