• ABP:关于JWT代替session


    填一个坑,之前一开始看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),所以不适合移动端
     

  • 相关阅读:
    257. 二叉树的所有路径
    销售易CRM怎么样?
    Http协议之Content-Type理解
    企业应用架构研究系列二十七:Vue3.0 之环境的搭建与Vue Antd Admin探索
    国产AI网址
    Perl 脚本运行时提示:Can‘t locate Win32/OLE.pm in @INC
    jmeter多个接口测试
    Django 用户认证
    C语言 数组
    HelloKitty 代码 Python
  • 原文地址:https://blog.csdn.net/dongnihao/article/details/126494991