作者:享学课堂老顾 一、前言这篇文章中我们来了解一下JWT是何方神圣?以及JWT来实现分布式Session。 二、JWT是什么JWT一看就是简称,它的全称JSON Web Token,从字面上我们看出
看看官方的说明,它定义了一种紧凑且自包含的方式,用于在各方之间以JSON对象进行安全传输信息。这些信息可以通过对称/非对称方式进行签名,防止信息被串改。
三、JWT数据结构
Header.Payload.Signature
看上去是不是满乱,我们来依次看下里面的结构。 四、Header这个是JWT第一段数据,表示头部信息,主要的作用是描述JWT的元数据,上面的案例就是:
上面的JSON数据会通过Base64算法进行编码而成,看工具图 五、Payload 此为JWT第二段数据,用来存放实际需要传递的数据。JWT官方也规定了7个字段供选用 当然除了官方字段,我们可以自定义字段,以上面的案例,我们看下实际的数据
六、Signature此为JWT第三段数据,主要作用是对前面两段的数据进行签名,防止数据篡改。一般我们进行签名的时候会有个密钥(secret),只有服务器知道,然后利用Header中的签名算法进行签名,公式如下: HMACSHA256( 算出签名后,把Header、Payload、Signature三个部分拼成一个字符串,之间用(.)分隔,这样就可以把组合而成的字符串返回给用户了。 七、JWT的工作方式在用户进行认证登录时,登录成功后服务器会返回一个JWT给客户端;那这个JWT就是用户的凭证,以后到哪里去都要带上这个凭证token。尤其访问受保护的资源的时候,通常把JWT放在Authorization header中。要用 Bearer schema,如header请求头中:
八、基于JWT的身份认证上面的JWT的工作方式,其实就是一个完整的身份认证流程,我们这里把这个讲的在通俗一点。
这个流程小伙伴们有没有发现,用户信息是放在JWT中的,是存放在客户端(cookie,local storage)中的,服务器只需解码验证就行了,就可以知道获取到用户信息。而我们之前的Session方式就不一样。 九、与Session-Cookie方式的区别Session-Cookie方式的这里就不多作介绍了,之前文章已经介绍了。直接上图说明区别 上图是Sesson服务器方式,我们发现Session用户信息是在服务器端存储的。 我们再来看看JWT方式 上面的token即用户信息是存储在客户端的,服务器端只要解码即可。 十、JWT方式认证的好处
说了这么多的好处,那是不是JWT就非常适合替换掉Session方式呢? 十一、JWT方式的坏处1、token失效问题 JWT方式最大的坏处就是无法主动让token失效,小伙伴们会说token不是有过期时间吗?是的,token本身是有过期时间,但token一旦发出,服务器就无法收回。
2、数据延时,不一致问题 还有个问题就是因为jwt中包含了用户的部分信息,如果这些部分信息修改了,服务器获取的还是以前的jwt中的用户信息,导致数据不一致。 十二、总结小伙伴们怎么去选择Session的方式,是用传统的Sesion-Cookie服务器方式,还是用JWT方式,具体集合业务看。不过老顾这里推荐还是用传统的方式,因为以后的业务很有可能会用到用户Session。好了,谢谢!!! |
|
来自: men_darling > 《待分类》