聊一聊JWT

简介: 聊一聊JWT

前言



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


简单了解JWT



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


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


JWT生成的token示例:


eyJhbGciOiJIUzUxMiJ9.eyJ1c2VySWQiOiIxMDAxIiwiaXNzIjoiSkNjY2MiLCJpYXQiOjE2MDU2Nzg0MTd9.5f8JwZoi1okX1mEmWDOt6YsZXrxtle52PsjZ92F2I0KBlOG3XRtoL9Tfx0TjQGdwbHzYhV_uz7aNDF0E_I1FPw


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


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


image.png


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


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


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


signature :签名


最后再简单看一张图:


image.png


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


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


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


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

正文



前面介绍太啰嗦了,该篇其实并不是个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交替等等。

相关文章
|
9月前
|
JSON 安全 Java
JWT的原理及实际使用
JWT的原理及实际使用
96 0
|
2月前
|
存储 算法 Java
闲鱼面试:说说JWT工作原理?
闲鱼面试:说说JWT工作原理?
30 0
闲鱼面试:说说JWT工作原理?
|
2月前
|
JSON 算法 Go
go语言后端开发学习(一)——JWT的介绍以及基于JWT实现登录验证
go语言后端开发学习(一)——JWT的介绍以及基于JWT实现登录验证
|
3月前
|
JSON 算法 安全
JWT介绍及入门
JWT介绍及入门
40 4
|
10月前
|
存储 JSON 算法
JWT的原理及实际应用
JWT的原理及实际应用
120 1
|
3月前
|
JSON 缓存 算法
第十三章 JWT
第十三章 JWT
30 0
|
3月前
|
存储 Java 数据安全/隐私保护
面试官:什么是JWT?为什么要用JWT?
面试官:什么是JWT?为什么要用JWT?
130 0
|
9月前
|
存储 JSON 算法
关于一篇什么是JWT的原理与实际应用
关于一篇什么是JWT的原理与实际应用
82 0
|
安全 NoSQL Redis
oatuth2.0 + JWT 案例
上一节,我们讲述了Oauth2.0 配合security的使用,配合redis去存token,或者配合Jwt去存token。这篇文章,我们主要来系统的串起来讲一下,从宏观的层面来讲述一下单点登录,并且来实现一个demo。
|
存储 JSON 算法
JWT的原理
JWT的原理
133 0