第一次听老大分享这个,我是懵逼的,查了下阮大大有相关文章,记录下自己的简单理解 看完文章误以为,JWT竞标CAS,其实不然;
背景:
传统的认证:
1、用户向服务器发送用户名和密码。
2、服务器验证通过后,在当前对话(session)里面保存相关数据,比如用户角色、登录时间等等。
3、服务器向用户返回一个 session_id,写入用户的 Cookie。
4、用户随后的每一次请求,都会通过 Cookie,将 session_id 传回服务器。
5、服务器收到 session_id,找到前期保存的数据,由此得知用户的身份。
JWT是一种将用户信息存储于客户端,替代session的方案,主要解决的问题是高并发,那是如何做到userInfo不被篡改的呢?这时候Signature出场了~
过程
用户login => JWT服务给客户端种下JWT => 调API带着JWT => 服务端验证信息
JWT原理
jwt由3部分组成,HEADER、PAYLOAD、SIGNATURE

- HEADER,Json数据,放着JWT的元数据,例如签名算法
- PAYLAOD,Json数据,放着需要传递的数据,userInfo、iss等等
- SIGNATURE,userInfo... => 算法加密 => JWT服务端秘钥加密,可有两种加密方式
- 对称加密:JWT服务用秘钥加密,服务端用秘钥解密
- 非对称加密:JWT服务用私钥加密,服务端用公钥解密
那么JWT的缺点是什么呢?
缺点
更改userInfo,可通过设置expired-time实现,那么时间设置的长短如何确定呢?时间太短,成本较大;时间太长,userInfo更新不及时;