聊一聊JWT

前言

看客们对于JWT,我估计大部分都是很熟悉的了。 但是不乏也存在初学者刚接触JWT,那么咱们走个流程,我先简单的在前言里介绍下JWT,因为该篇文章目的不是做JWT的使用介绍。

 

简单了解JWT

简单来讲,可以把JWT当作是一个写好的生成token令牌(字符串)的方法,使用JWT,就会生成 一个token 字符串。

说白了,就是一个签名的生成规则算法。

 

JWT生成的token示例:

eyJhbGciOiJIUzUxMiJ9.eyJ1c2VySWQiOiIxMDAxIiwiaXNzIjoiSkNjY2MiLCJpYXQiOjE2MDU2Nzg0MTd9.5f8JwZoi1okX1mEmWDOt6YsZXrxtle52PsjZ92F2I0KBlOG3XRtoL9Tfx0TjQGdwbHzYhV_uz7aNDF0E_I1FPw

咋一看感觉,很长很乱,加密得非常复杂。

那么我们加点颜色再看看:

没错,每一段不同颜色的字符串之间 可以看到,使用了符号 ’ . ‘  进行了拼接。  一共三段字符串分别是 header payloadsignature,组成了 所谓的 token令牌。



header  :  存储着该令牌使用的加密算法标识信息   


payload  :存储着 我们放进令牌里面的数据信息


signature :签名

 

最后再简单看一张图:

 

大家从图中可以看到我们很熟悉的   base64   , 大家明白 base64 不是一种加密算法, 而仅是一种编码转换方式而已。

也就是说,header 和 payload 这两部分 是可以随意解码的。

就以目前这个token令牌字符串来看,我们解码看看:

ps: 所以到这你能明白所谓的token为什么我说当作一个签名的生成的规则算法看待就行了。


 

正文

 

前面介绍太啰嗦了,该篇其实并不是个JWT使用普及文章,是想埋怨一下 注意点。

 

 

 ① 让 JWT-TOKEN 当场失效:
 

1. 账号注销/登录注销

用户在客户端登录了账号,请求授权, 拿到了 JWT-TOKEN 。

用户选择注销登录(或者账号被注销),那么讲道理其实之前的JWT-TOKEN 应该是无效的了。

2.修改密码

用户在客户端登录了账号,请求授权, 拿到了 JWT-TOKEN 。

用户修改了密码,那么讲道理其实之前的JWT-TOKEN 应该是无效的。

3.修改资源权限信息

有些情形我们会选择在JWT-TOKEN 使用自定义Claims,在Claims里面放入 role(角色),permission(权限)等数据。

用户的 role(角色),permission(权限) 一旦被修改, 那么讲道理其实之前的JWT-TOKEN 应该是无效的了。

 

类似上面举例的这种情形,

JWT是无法提供这种售后服务的, 没有办法直接指定某个JWT-TOKEN  ,使其当场失效。

那么也就是说,如果这个JWT-TOKEN  被人拎出来,在有效期内去使用,那么这个令牌就还是有用的。

 

所以对于这种场景我们的方案是:

使用  redis 去缓存 授权颁发的JWT-TOKEN , 通过在redis 中去管理 是否删除(失效)JWT-TOKEN 。

 

可是这么一来,其实也就不是 所谓的无状态了。

因为原本很多人选择使用token,就是想脱离session 这种服务有状态的模式。想让前端自己保存token,后端不需要花费精力去管理。一旦加入redis,其实可以理解为又回到了原点。

只是说在一个方面上直接避免了session的一些问题。

 

 

②延长token时间、刷新token:

 

token快过期了或者过期了,我想刷新续签一下。让这个token 再次获得生命!

JWT只会给你一个新的token。

需要我们自己去合理选择刷新token与客户端协作的方案,无感知刷新、新旧token交替等等。

 

 

 

 

 

 

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小目标青年

对你有帮助的话,谢谢你的打赏。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值