小白对 JWT 跟 session 有些疑问,期望解惑?

看了了许多文档,我的理解 JWT 本质上是一种将用户信息放到浏览器持久化的方案,这种方案要求服务端必须相信请求携带的 JWT 信息。

这种方案下是否能实现 用户权限动态变更的业务,比如踢人

若实现不了,需要服务端根据 JWT 查找用户信息, 是否又需要回归到 session 的解决方案

阅读 772
2 个回答
  • jwt的优势在于,服务端收到请求后,可以直接拿到用户的身份信息,无需再查库或者访问数据中心之类的中心化服务。反过来说,只要存在类似踢人的需求,那么 jwt 的优势直接消失,反正都要查,在请求里放一个更小的 token 去查更简单
  • 所以 jwt 适合的场景其实是服务和服务之间的通信,网关获取到用户身份,做成 jwt 加到请求里,后续服务就不需要再访问用户服务这种中心服务了,而且一次请求一个 jwt,不需要考虑踢人之类的事情
  • 最后说一下 session,session 就是 session,类似一个 Map,客户端发请求带着一个 key,服务端用这个 key 拿到 session。最传统的 cookie 里放 sessionid 是最简单有效的方式,类似 app 这种非浏览器环境,token 其实也是起到 sessionid 的作用,而 jwt 其实就是把’去找 session‘的操作变成了’把 session 解析出来‘的操作

JWT设计之初是为了解决无session化设计的问题,也就是服务端并不持久化任何JWT,客户端每次请求的时候携带JWT就行了

踢人这种场景是需要session化的,所以JWT不符合你的需求,非要用JWT你也就只能自己做session了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏