jwt介绍

前言

很多人不了解 JWT(JSON Web Token)啥意思,甚至jwt、cookie、token(令牌)、session、单点登录是啥搞不清,这篇文章以 JWT 介绍为引,顺便简单区分一下他们之间的关系,总而言之,这篇文章不白看

介绍

上面讲的实际上都是单点登录过程中的参与角色之一,这也是统一身份认证环境系统中的一部分

我们从一个角度开始分析他们之间的关系

  1. 我们都知道 http 是无状态协议,那么无状态的情况,服务器作为一个用户管理中心,他怎么知道我们我们用户是谁操作的呢(怎么区分用户呢)
  2. 很明显根据用户账号,而我们发现用户并不是每次都登陆,很麻烦,于是我们进一步追溯到了用户注册用户时,会在数据库中生成我们互联网用户的唯一标识,这个标识就是我们的用户id(互联网的身份证号),早期就是直接使用用户id来区分我们的身份
  3. 当使用账号密码登录后,客户端就会获取到用户的id,存放在内存中,后续对于需要确认用户的的操作传递用户id即可
  4. 那么问题来了,直接使用用户id不太好,不安全,再加上一些其他常用数据原因,于是出现了session,也就是服务端保存用户常用信息,使用一个session 关联用户,session id发送给用户,用户拿着session 给服务端,服务端确认身份,拿着信息直接操作,可是这样管理 session,用户一多服务端压力还会变大,也衍生出了redis 的操作,现在仍然受用
  5. 当然也出现了更加主流的身份令牌,发放一个期限的 token令牌 来代替我们的用户id,也就是身份令牌,这样就算token 泄露了,也不会长期被持有,风险大幅度降低,有条件再加上防篡改操作,这样 jwt 结构就出现了,后续就让用户拿着这些信息访问即可
  6. 那还有一个问题,并且我们客户端一旦不小心中途退出,重新进入又要重新输入账号密码,麻烦,需要用户本地保存一下令牌,这也是从session 方案就开始的存储方式了,那么令牌怎么存放呢,浏览器有cookie,localStore 的方式,于是出现了cookie + session 的方式,同时还有移动端的纯token方式,双token等
  7. 上面签名令牌后续免认证过程就是单点登录的核心逻辑,是统一身份认证子集,统一身份认证还包含整个签名过程、权限等更复杂功能

ps:当然身份系统打通的话,一个token便可以分别使用到多个平台

那么单点登录解决了什么问题?

答:单点登录,在这个系统中,同一个用户只需要登录一次,后续就可以拿着登录后签发的令牌免认证操作,减少了很多麻烦

cookie 是啥?

答:cookie是浏览器保存服务器令牌的一种方式,可以在浏览器中持久存放,即使用户不小心关闭标签,下次仍然可以在请求中取出它亮出我们的身份,当然如果过期了,就不行了需要重新登录签名

session是啥?

session是服务端的一个缓存,一种key-value结构,key则是生成的sessionid,用于给用户,value是用户信息或者令牌,可以根据用户传递过来的sessionid来直接获取到用户的信息

jwt

JWT(JSON Web Token) 实际上就是一种token令牌的生成方式,其主要组成方式如下所示:

  • 头部结构,主要保存了加密算法
  • 荷载payload,保存了我们的内容
  • Signature,加密结果,用于后端对比,避免有人篡改荷载信息

看了上面的结构,相信也能知道什么是jwt了,且jwt的内容是接近明文的,只是有了加密串防篡改,相对也安全了不少,且里面也有时间戳,能设置过期时间,算是很方便了

后端可以直接获取jwt,直接验证内容是否串改,里面的token可以直接使用了,一般token和用户信息会有一个对照表,直接使用token对照用户信息操作即可

最后

他们之间的关系大致如此,更细的没有多介绍,到了这里更细的只要稍微查一下,就能查到,本篇文章就介绍到这里了

相关推荐
爱敲代码的小鱼5 小时前
AJAX(异步交互的技术来实现从服务端中获取数据):
前端·javascript·ajax
Cobyte6 小时前
AI全栈实战:使用 Python+LangChain+Vue3 构建一个 LLM 聊天应用
前端·后端·aigc
NEXT066 小时前
前端算法:从 O(n²) 到 O(n),列表转树的极致优化
前端·数据结构·算法
剪刀石头布啊6 小时前
生成随机数,Math.random的使用
前端
剪刀石头布啊6 小时前
css外边距重叠问题
前端
剪刀石头布啊6 小时前
chrome单页签内存分配上限问题,怎么解决
前端
剪刀石头布啊6 小时前
css实现一个宽高固定百分比的布局的一个方式
前端
剪刀石头布啊6 小时前
js数组之快速组、慢数组、密集数组、稀松数组
前端
mango_mangojuice6 小时前
Linux学习笔记(make/Makefile)1.23
java·linux·前端·笔记·学习