首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JWT实现分布式Session?行不?

老顾导读

1、前言

2、jwt是什么

3、jwt数据结构

4、jwt工作方式

5、基于JWT身份认证

6、与Session-Cookie方式的区别

7、JWT方式认证的好处

8、JWT方式的坏处

9、总结

三、JWT数据结构

JWT由三个部分组成

1、Header

2、Payload

3、Signature

三者组合在一起

Header.Payload.Signature

案例

看上去是不是满乱,我们来依次看下里面的结构。

Header

这个是JWT第一段数据,表示头部信息,主要的作用是描述JWT的元数据,上面的案例就是:

{ alg: "HS256", typ: "JWT" }

1、alg属性表示签名的算法,默认算法为HS256,可以自行别的算法。

2、typ属性表示这个令牌的类型,JWT令牌就为JWT。

上面的JSON数据会通过Base64算法进行编码而成,看工具图

Payload

此为JWT第二段数据,用来存放实际需要传递的数据。JWT官方也规定了7个字段供选用

当然除了官方字段,我们可以自定义字段,以上面的案例,我们看下实际的数据

注意:这段也是用Base64算法,JWT默认是不加密的,任何人都可以获取,只要进行Base64解码就行了,所以不要把隐密的信息放到JWT中

Signature

此为JWT第三段数据,主要作用是对前面两段的数据进行签名,防止数据篡改。一般我们进行签名的时候会有个密钥(secret)只有服务器知道,然后利用Header中的签名算法进行签名,公式如下:

HMACSHA256(  base64UrlEncode(header) + "." +base64UrlEncode(payload),  secret)

算出签名后,把Header、Payload、Signature三个部分拼成一个字符串,之间用(.)分隔,这样就可以把组合而成的字符串返回给用户了。

四、JWT的工作方式

在用户进行认证登录时,登录成功后服务器会返回一个JWT给客户端;那这个JWT就是用户的凭证,以后到哪里去都要带上这个凭证token。尤其访问受保护的资源的时候,通常把JWT放在Authorization header中。要用 Bearer schema,如header请求头中:

Authorization: Bearer <token>

六、与Session-Cookie方式的区别

Session-Cookie方式的这里就不多作介绍了,之前文章已经介绍了。直接上图说明区别

上图是Sesson服务器方式,我们发现Session用户信息是在服务器端存储的。

我们再来看看JWT方式

上面的token即用户信息是存储在客户端的,服务器端只要解码即可。

九、总结

小伙伴们怎么去选择Session的方式,是用传统的Sesion-Cookie服务器方式,还是用JWT方式,具体集合业务看。不过老顾这里推荐还是用传统的方式,因为以后的业务很有可能会用到用户Session。好了,谢谢!!!

  • 发表于:
  • 原文链接https://page.om.qq.com/page/Odo4k0C50f_qEbG-lqoBJ7fw0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券