前言
很多人不了解 JWT(JSON Web Token)啥意思,甚至jwt、cookie、token(令牌)、session、单点登录是啥搞不清,这篇文章以 JWT 介绍为引,顺便简单区分一下他们之间的关系,总而言之,这篇文章不白看
介绍
上面讲的实际上都是单点登录过程中的参与角色之一,这也是统一身份认证环境系统中的一部分
我们从一个角度开始分析他们之间的关系:
- 我们都知道 http 是无状态协议,那么无状态的情况,服务器作为一个用户管理中心,他怎么知道我们我们用户是谁操作的呢(怎么区分用户呢)
- 很明显根据用户账号,而我们发现用户并不是每次都登陆,很麻烦,于是我们进一步追溯到了用户注册用户时,会在数据库中生成我们互联网用户的唯一标识,这个标识就是我们的用户id(互联网的身份证号),早期就是直接使用用户id来区分我们的身份
- 当使用账号密码登录后,客户端就会获取到用户的id,存放在内存中,后续对于需要确认用户的的操作传递用户id即可
- 那么问题来了,直接使用用户id不太好,不安全,再加上一些其他常用数据原因,于是出现了session,也就是服务端保存用户常用信息,使用一个session 关联用户,session id发送给用户,用户拿着session 给服务端,服务端确认身份,拿着信息直接操作,可是这样管理 session,用户一多服务端压力还会变大,也衍生出了redis 的操作,现在仍然受用
- 当然也出现了更加主流的身份令牌,发放一个期限的 token令牌 来代替我们的用户id,也就是身份令牌,这样就算token 泄露了,也不会长期被持有,风险大幅度降低,有条件再加上防篡改操作,这样 jwt 结构就出现了,后续就让用户拿着这些信息访问即可
- 那还有一个问题,并且我们客户端一旦不小心中途退出,重新进入又要重新输入账号密码,麻烦,需要用户本地保存一下令牌,这也是从session 方案就开始的存储方式了,那么令牌怎么存放呢,浏览器有cookie,localStore 的方式,于是出现了cookie + session 的方式,同时还有移动端的纯token方式,双token等
- 上面签名令牌后续免认证过程就是单点登录的核心逻辑,是统一身份认证子集,统一身份认证还包含整个签名过程、权限等更复杂功能
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对照用户信息操作即可
最后
他们之间的关系大致如此,更细的没有多介绍,到了这里更细的只要稍微查一下,就能查到,本篇文章就介绍到这里了