当前位置: 首页 > news >正文

JSON Web Token (JWT) 详解:由来、原理与应用实践

1. JWT的由来与发展背景

 1.1 HTTP无状态性带来的挑战

        HTTP协议本质上是无状态的,这意味着服务器不会记住之前的请求信息。在早期的Web应用中,用户每次访问受保护资源都需要重新登录,这显然不是良好的用户体验。为解决这一问题,开发者引入了Cookie技术,通过在请求和响应报文中写入Cookie信息来控制客户端状态。

 1.2 Session认证机制的局限性

        传统的基于Session的身份认证机制虽然解决了HTTP无状态的问题,但随着互联网应用的发展,逐渐暴露出几个关键问题:

1.服务器压力增大:每个认证用户都需要在服务端保存Session数据,随着用户量增长,服务器内存消耗显著增加。

2.扩展性问题:在分布式系统或集群环境下,Session数据通常存储在单台服务器内存中,当用户请求被负载均衡到不同服务器时,会出现Session不一致的问题。

3.CSRF攻击风险:Session机制依赖Cookie,容易受到跨站请求伪造(CSRF)攻击。

4.移动端适配困难:移动应用对Cookie的支持不如浏览器完善,使得基于Session的认证在移动端表现不佳。

1.3 JWT的诞生

        为解决上述问题,JSON Web Token(JWT)应运而生。JWT是一种开放标准(RFC 7519),定义了一种紧凑且自包含的方式,用于在各方之间安全地传输JSON格式的信息。JWT的设计理念是将用户认证信息直接包含在Token中,而不是存储在服务器端,从而实现了无状态认证

2. JWT的核心结构与工作原理

2.1 JWT的组成结构

JWT由三部分组成,使用点号(.)连接:`Header.Payload.Signature`

2.1.1 Header(头部)

头部通常包含两部分信息:
typ:令牌类型,固定为"JWT"
alg:签名算法,如HS256(HMAC SHA-256)或RS256(RSA SHA-256)

示例:

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

头部经过Base64Url编码后形成JWT的第一部分。

2.1.2 Payload(负载)

负载包含声明(claims),即关于实体(通常是用户)和其他元数据的声明。声明分为三种类型:

1. 注册声明(Registered claims):预定义的声明,建议但不强制使用:
   - iss (issuer):签发者
   - exp (expiration time):过期时间
   - sub (subject):主题(用户ID)
   - aud (audience):接收方
   - iat (issued at):签发时间
   - nbf (not before):生效时间
   - jti (JWT ID):唯一标识

2. 公共声明(Public claims):可以自定义的公开字段,应避免冲突

3. 私有声明(Private claims):提供者和消费者共同定义的声明

示例:

http://www.lqws.cn/news/166735.html

相关文章:

  • 在 Ubuntu 24.04 LTS 上安装 Jenkins 并配置全局工具(Git、JDK、Maven)
  • LeetCode-70. 爬楼梯
  • 八、Python模块、包
  • QT中使用libcurl库实现到ftp服务器的上传和下载
  • C语言 — 编译和链接
  • 体制内 AI写作:推荐材料星 AI文章修改润色
  • 11. vue pinia 和react redux、jotai对比
  • 互联网大厂Java求职面试:AI与大模型技术在企业知识库中的深度应用
  • minimatch 详解:功能、语法与应用场景
  • uniapp+vue3实现CK通信协议(基于jjc-tcpTools)
  • IDEA 包分层显示设置
  • BT Panel密码修改
  • 【Redis】类型补充
  • ROS2--导航仿真
  • sumatraPDF设置深色界面
  • YOLOv11 | 注意力机制篇 | 可变形大核注意力Deformable-LKA与C2PSA机制
  • JTAG与SWD的功能辩解有和相关
  • Mysql主从复制原理分析
  • 缓解停车难:4G地磁如何重构车位分配?
  • proteus8安装教程
  • CppCon 2015 学习:C++ Metaprogrammin
  • 【虚拟机版本号】如果忘记了版本号,这样查找版本号
  • C++虚函数表(虚表Virtual Table,简称vtable、VFT)(编译器为支持运行时多态(动态绑定)而自动生成的一种内部数据结构)虚函数指针vptr
  • 【如何做好应用架构?】
  • YOLOv11 | 注意力机制篇 | 混合局部通道注意力MLCA与C2PSA机制
  • CMake指令:add_definitions
  • 06.最长连续序列
  • 是否存在路径(FIFOBB算法)
  • Java-IO流之缓冲流详解
  • 实现基于Yolo的异常聚集算法