ABP:关于JWT代替session

  • Post author:
  • Post category:其他


填一个坑,之前一开始看http请求时候一直不理解为什么传输的数据叫做payLoad,今天想起来把JWT的坑填了。

session机制在分布式系统下,有诸多问题。

1. 负载均衡,每次访问的服务器都不一样,无法识别sesssionId

2. 另外分配一台中心化服务器当作存储会话服务器,导致性能降低

3. session对应的

用户名

在服务器端!!! 返回的sessionId在

客户端

所以出现了

JWT,

JSON Web Token

1. JWT在客户端,别担心造假,经过签名处理(各种h),密钥在服务器端,服务器会检查

2.JWT由3部分组成:标头(

Header

)、有效载荷(Payload)和签名(Signature)。在传输的时候,会将JWT的3部分分别进行Base64编码后用

.

进行连接形成最终传输的字符串



JWTString

=

Base64(Header)

.

Base64(Payload)

.

HMACSHA256(base64UrlEncode(header) + “.” + base64UrlEncode(payload), secretKey)


多说几句,playLoad就是你传输的数据对象。

优势,直接看红色文字即可

对比传统的session认证方式,JWT的优势是:

1. 因为JWT Token是以JSON加密形式保存在客户端的,所以JWT是

跨语言

的,原则上任何web形式都支持

2. 不需要在服务端保存会话信息,也就是说不依赖于cookie和session,所以没有了传统session认证的弊端,特别适用于

分布式微服务



3. 单点登录友

好:使用Session进行身份认证的话,由于cookie无法跨域,难以实现单点登录。但是,使用token进行认证的话, token可以被保存在客户端的任意位置的内存中,不一定是cookie,所以不依赖cookie,不会存在这些问题


4. 适合移动端

应用:使用Session进行身份认证的话,需要保存一份信息在服务器端,而且这种方式会依赖到Cookie(需要 Cookie 保存 SessionId),所以不适合移动端



版权声明:本文为dongnihao原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。