为什么要使用JWT
项目中要求使用jwt,但是自己始终不明白为什么要使用jwt,我理解的jwt就是可以生成一个token,这个token可以保存一些信息,当然也可以进行验证信息,他可以代替session吗?session为什么要被他代替?我要用jwt来干什么?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
项目中要求使用jwt,但是自己始终不明白为什么要使用jwt,我理解的jwt就是可以生成一个token,这个token可以保存一些信息,当然也可以进行验证信息,他可以代替session吗?session为什么要被他代替?我要用jwt来干什么?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(14)
业务无状态化指的是什么?
我觉得jwt最大的优点就是能让业务无状态化,让token作为业务请求的必须信息随着请求一并传输过来,服务端不用再去存储session信息,尤其是在分布式系统中,一来节约服务器性能,二来鉴权方便
存这么多,更改资料怎么办?多终端的情况
jwt生成的token每次请求要携带上,后台解析token就能获取到帐号信息,能很好解决分布式系统中常见的session不同步失效的问题,内容可以自己定义,我们用jwt里时存的是基本信息,JSON格式,只存了用户ID、用户名、昵称,因为东西越多,生成的jwt也就越长,你打开OSC的网站后按F12,在cookie里有一项叫oscid的,挺长,类似于jwt,但是OSC具体用的是什么不知道
其实最重要的就是他是自包含的(self-contained)
jwt也有自己的缺点。比如我更改密码无感知,其实自己用rd来生成token也许是最安全最佳的解决方案。jwt可以携带一定的非隐私信息,但是修改密码就悲催了。
jwt主要还是用在前端调用后端接口中,来做鉴权的吧,分布式系统中session处理比较麻烦。用jwt相对来说简单一些。
有时候session中的内容是非常多的,例如一个人要登录一个管理后台,管理后台可能有一级菜单、二级菜单,等上百个菜单,用户有哪些菜单权限都要记录到session中。大小估计快有1m了。这种情况下如果用jwt,把这些信息都放到请求头中显然不合适。因为每次请求都带上这么重一个包伏也太他妈重了。如果是前台相关页面session中只会保存少量跟用户相关的信息到是可以用jwt。
回复
token保存在客户端,不在后台。每次客户端向后台发送请求时,都带着token
后台应该需要验证token的正确性吧,这个验证是否正确只需要对应的jar包就行?还有生成token得有一个时间有效期吧,这个有效期是后台的吗?
回复
@韦小仇 : 我在其中一台服务器登录并且返回给客户端一个token,然后客户端现在请求另一台服务器,另一台服务器如何验证token呢?如果token正确性不涉及业务逻辑,只是根据一个字符串和时间生成的token
回复
你去了解下jwt就知道了
回复
@韦小仇 : 你说对,不过jwt不是需要签名的密钥来生成消息摘要吗,两个机房要是没有相同的加密密钥,那怎么验证token的正确性。
假设现在有一个APP,后台是分布式系统。APP的首页模块部署在杭州机房的服务器上,子页面模块部署在深圳机房的服务器上。此时你从首页登录了该APP,然后跳转到子页面模块。session在两个机房之间不能同步,用户是否需要重新登录?传统的方式(cookie+session)需要重新登录,用户体验不好。session共享(在多台物理机之间传输和复制session)方式对网络IO的压力大,延迟太长,用户体验也不好。JWT相当于将session保存在了客户端,解决了后台session复制的问题