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对照用户信息操作即可

最后

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

相关推荐
ayqy贾杰几秒前
Claude Fable 5 提示词泄漏,抓紧学习下
前端·后端·面试
To_OC8 小时前
别再串行写 await 了,Promise.all 才是并行请求的正确打开方式
前端·javascript·promise
vipbic9 小时前
中后台越做越乱后,我用插件化把它救回来了
前端·vue.js
Hyyy9 小时前
Computer Use 适合做什么,不适合做什么——一次真实使用后的思考
前端
小和尚同志9 小时前
前端 AI 单元测试思考与落地
前端·人工智能·aigc
invicinble10 小时前
c端系统,其实更像一个信息展示平台
前端
李姆斯11 小时前
管理是否可以被完全量化
前端·产品经理·团队管理
名字还没想好☜12 小时前
Next.js 中间件实战:鉴权、重定向与 A/B 分流
开发语言·前端·javascript·中间件·react·next.js
广州灵眸科技有限公司12 小时前
瑞芯微RV1126B开发板(EASY-EAI-PI2) INI文件操作
java·前端·javascript·网络·人工智能
kaiking_g13 小时前
vue项目中,静态导入 vs 动态导入 详解
前端·javascript·vue.js