ikki@github.io:~$

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 是需要手动开启的