JWT与Session的比较

日期:2020-01-14 22:22:37 来源:互联网 编辑:小TT 阅读人数:298

JWT与Session的比较(图1)

如今,越来越多的项目开始采用JWT作为认证授权机制,那么它和之前的Session究竟有什么区别呢?今天就让我们来了解一下。

JWT是什么

定义JSON Web Token(JWT)是一个开放标准(RFC 7519)它定义了一种紧凑和自包含的方式,用于在各方之间作为JSON对象安全地传输信息。作为标准,它没有提供技术实现,但是大部分的语言平台都有按照它规定的内容提供了自己的技术实现,所以实际在用的时候,只要根据自己当前项目的技术平台,到官网上选用合适的实现库即可。

特点

自包含:这个串可以包含很多信息,比如用户的id、角色等,别人拿到这个串,就能拿到这些关键的业务信息,从而避免再通过数据库查询等方式才能得到它们。

结构

JWT与Session的比较(图2)

它由三部分组成:header头部payload载荷signature签名以.进行分割。这个字符串本来是只有一行的,此处分成3行,只是为了区分其结构header用来声明类型typ和算法alg

payload一般存放一些不敏感的信息,比如用户名、权限、角色等。

signature则是将header和payload对应的json结构进行base64url编码之后得到的两个串用英文句点号拼接起来,根据header里面alg指定的签名算法生成出来的。

和Session的区别

为什么我们要把JWT和Session做对比呢?因为我们主要在每一次请求的认证时会用JWT,在此之前我们都是用Session的。那这两者的区别在哪儿呢?

本身的含义

看了前面的介绍,我们发现JWT这个字符串其实本身就包含了关于用户的信息,比如用户名、权限、角色等。

Session传递的sessionId虽然是一个更简单的字符串,但它本身并没有任何含义。

所以一般说来JWT的字符串要比sessionId长,如果你在JWT中存储的信息越长,那么JWT本身也会越长。

而Cookie的存储容量是有限制的(通常为4KB)所以大家在使用的时候需要注意。

解析方法

JWT的header和payload其实是有json转变过来的,而signature其实就是一个加密后的字符串,因此解析起来较为简单,不需要其他辅助的内容。

sessionId是存储的用户对象的标识,理论上需要一个额外的map才能找出当前用户的信息。

方法

JWT理论上用于无状态的请求,因此其用户也只是依赖本身而已。我们一般是在它的payload中加入过期时间,在不增加额外的情况下,它只有自动过期的方式。

Session因为它本就是存储在端的,因此方案就有很多,而且大多都很成熟。

跨平台

session的跨平台可能就不那么好做了,需要考虑的地方在于用户信息存储的格式,ProtoBuf、json、xml等,的话可能就需要专门的统一登录平台,这个就不展开了。

时效性

无状态JWT一旦被生成,就不会再和服务端有任何瓜葛。一旦服务端中的相关数据更新,无状态JWT中存储的数据由于得不到更新,就变成了过期的数据。

session就不一样了,sessionId本身就没有太多含义,只需修改服务端中存储的数据即可。

适用场景

JWT

JWT的最佳用途是一次性授权Token,这种场景下的Token的特性如下:有效期短

只希望被使用一次

Session

Session比较适用于Web应用的会话,其特点一般是:权限多,如果用JWT则其长度会很长,很有可能突破Cookie的存储限制。

基本信息容易变动。如果是一般的后台,肯定会涉及到人员的变化,那么其权限也会相应变化,如果使用JWT,那就需要端进行主动失效,这样就将原本无状态的JWT变成有状态,改变了其本意。

总结

本文相关词条概念解析:

信息

信息,指音讯、消息;通讯系统传输和处理的对象,泛指人类社会传播的一切内容。人通过获得、识别自然界和社会的不同信息来区别不同事物,得以认识和改造世界。在一切通讯和控制系统中,信息是一种普遍联系的形式。1948年,数学家香农在题为“通讯的数学理论”的论文中指出:“信息是用来消除随机不定性的东西”。美国数学家、控制论的奠基人诺伯特·维纳在他的《控制论——动物和机器中的通讯与控制问题》中认为,信息是“我们在适应外部世界,控制外部世界的过程中同外部世界交换的内容的名称”。英国学者阿希贝认为,信息的本性在于事物本身具有变异度。

延伸 · 推荐

程序员应该如何设计更优雅的Token认证方式? 基于Token的认证 jwt 头部 Payload Signature 写在最后

基于Token的认证通过上一篇你大体已经了解session和cookie认证了,session认证需要服务端做大量的工作来保证session信息的一致性以及session的存储,所以现代的web应用在...

网友评论
相关文章
算力提高的背后,革命性的算法

算力提高的背后,革命性的算法

算力提高的背后,革命性的算法[详情]

8点1氪,未就收购TikTok进行磋商,华特迪士尼发布第三财季业绩,在北美市场

8点1氪,未就收购TikTok进行磋商,华特迪士尼发布第三财季业绩,在北美市场

8点1氪,未就收购TikTok进行磋商,华特迪士尼发布第三财季业绩,在北美市场[详情]

暴雨台风双预警究竟怎么回事?暴雨台风双预警具体情况

暴雨台风双预警究竟怎么回事?暴雨台风双预警具体情况

暴雨台风双预警究竟怎么回事?暴雨台风双预警具体情况[详情]

网站地图    Copyright     2016-2018  资讯网   All rights reserved.