Jwt实战和疑问
JWT实战和疑问
关于JWT
jwt 全称 json web token, JWE 和 JWS 都是可以JWT 的一种
JWT 是一种基于JSON 格式,经过签名或加密传输的令牌。
“JWT 和 Session 的区别”
这里想从概念和使用上来区别
-
Session 是服务器识别客户端的身份,并能做到会话的一种能力,它不是一种具体技术
-
JWT 是一种令牌,一种按照规范编码的字符串
通常,为了做到服务器识别客户端的身份,需要服务器和客户端使用一些列的技术手段参与。
-
服务器需要一个类似哈希表的存储结构,它可以是HashMap, 也可以是RedisDB。
-
客户端需要一个本地存储空间,它可以是 Cookie, sessionStorage, localStorage。
-
然后剩下的就是,在网络请求时,带上这个令牌就可以了。
从以上看出,在整个会话场景中,jwt和sessionid 扮演的角色没有什么不同。
JWT 对后端架构的影响
jwt 安全和存储
和Session 不同的是,使用JWT 后,服务器不需要一个类似哈希表的结构,去验证会话的有效性。session 使用的是“存在即有效”,而 jwt 使用的是签名和算法,安全性也大大提升。
jwt 的续期和吊销
-
jwt 和 session 都有过期机制。不同的是,jwt 需要额外的token 进行续期,而session 仅仅更新服务端对应的 过期时间,同样的,更换一个新的token 比一个常驻内存的id 要安全的多
-
jwt 可以使用黑名单机制进行 jwt 的吊销,虽然这样用到了额外的存储,看似和session 机制类似了,但就使用的存储空间而言,资源的消耗仍然极小。(如果是用户大量退出登陆的恶意猜想,我想说的是,这种人宁愿不去猜想session 的安全问题,也要拼命维护自己的技术尊严)
-
关于变更密码会话失效的场景。可能用户只在 新的设备上尝试登陆时忘记了密码,但不需要让其他端侧的会话失效。
jwt在分布式场景下的长处
随着移动互联网和多端的使用场景的出现,jwt 展现了它的优势。
- 海量的设备进行会话时,服务端不需要中心化验证token 的合法性。session 的技术手段往往会导致 “用户服务”或“账号服务” 其他业务线的线的性能瓶颈
- 移动设备 经常使用WebView 技术,而WebView 的Cookie 是需要手动开启的