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

从 Session 到 JWT:Web 认证系统的发展与 JWT 原理详解

文章目录前言一、Web 认证系统的发展史1.第一代认证方案Cookie Session2.Session 方案的问题开始出现1. Session 存储压力大2. 分布式系统难处理3. 移动端时代到来二、JWT 是什么三、JWT 的结构到底长什么样1.第一部分Header头部2.第二部分Payload载荷3.第三部分Signature签名四、JWT 的完整认证流程五、为什么 JWT 会这么流行1. 无状态2. 天然适合前后端分离3. 微服务友好六、JWT 的缺点1. Token 无法主动失效2. Token 泄露风险3. JWT 不适合存太多数据七、JWT 为什么成为现代 Web 主流前言在 Web 开发中“认证”是一个绕不开的话题。简单来说认证系统解决的问题其实只有一个“服务器怎么知道你是谁”比如你登录了一个音乐平台、电商网站或者后台管理系统之后你刷新页面、切换功能、甚至第二天再回来系统依然知道你是哪个用户。这背后依赖的就是 Web 认证系统。很多初学者第一次接触认证时会觉得 JWT、Session、Token 这些概念特别绕。但实际上只要理解它们的发展过程你会发现 JWT 的出现其实非常自然。一、Web 认证系统的发展史HTTP 协议有一个天然特点每一次请求都是独立的。服务器不会记住你之前做过什么。举个例子你第一次请求POST /login服务器知道你登录了。但第二次请求GET /user/info服务器其实已经“不认识你了”。因此Web 认证系统本质上就是想办法让服务器持续记住用户身份。1.第一代认证方案Cookie Session早期互联网最经典的方案就是Cookie Session它的工作流程其实不复杂。用户登录用户名 密码 ↓ 服务器验证成功 ↓ 服务器创建 Session ↓ 生成 SessionID ↓ 把 SessionID 返回给浏览器 Cookie之后浏览器每次请求Cookie: sessionidxxxx服务器就能根据 SessionID 找到对应用户。整个过程如下浏览器 ↓ 携带 SessionID 服务器 ↓ 查询 Session 找到用户信息这个方案统治了 Web 很多年。因为它简单、稳定而且容易理解。2.Session 方案的问题开始出现随着互联网规模越来越大Session 的问题也逐渐暴露。比如1. Session 存储压力大Session 通常保存在服务器内存中。如果有几十万用户在线服务器需要保存几十万个 Session内存压力会非常大。2. 分布式系统难处理后来网站开始变成负载均衡 ↓ 多台服务器问题来了用户第一次登录在 A 服务器。第二次请求被转发到了 B 服务器。但B 服务器没有这个 Session用户就会掉登录状态。于是开发者不得不引入RedisSession 共享Session 同步系统复杂度迅速上升。3. 移动端时代到来Session 更适合传统浏览器。但后来AndroidiOS小程序前后端分离微服务越来越普及。这时候大家开始需要一种更轻量、更独立的认证方案JWT 就是在这种背景下出现的。二、JWT 是什么JWT 全称JSON Web Token它本质上是一个经过签名的字符串。服务器把用户信息直接放进 Token 中。之后客户端自己保存 Token每次请求时Authorization: Bearer xxxxx服务器只需要验证 Token 是否合法即可。不再需要保存 Session。这就是 JWT 最大的特点无状态认证三、JWT 的结构到底长什么样JWT 通常由三部分组成Header.Payload.Signature例如xxxxx.yyyyy.zzzzz三部分之间用.分隔。1.第一部分Header头部Header 记录Token 类型加密算法例如{alg:HS256,typ:JWT}意思是使用 HS256 算法 Token 类型是 JWT2.第二部分Payload载荷Payload 存放用户信息。例如{id:1,username:admin,role:super_admin}这里通常会保存用户ID用户名权限信息过期时间比如{exp:1710000000}表示 Token 什么时候失效。需要注意Payload 只是 Base64 编码并不是加密。因此不要在 JWT 里存密码3.第三部分Signature签名Signature 是 JWT 最核心的部分。服务器会使用Header Payload 密钥生成签名。例如HMACSHA256( base64(Header) . base64(Payload), secret )这样可以保证Token 不会被篡改因为攻击者没有服务器密钥。四、JWT 的完整认证流程JWT 的登录流程其实非常清晰在前后端分离项目中经常会这样传递Authorization: Bearer token后端拿到 Token 后验证签名 验证是否过期 解析 Payload 获取用户信息整个过程不需要查询 Session。五、为什么 JWT 会这么流行JWT 在现代 Web 开发里几乎随处可见。尤其是FastAPISpringBootNode.js微服务前后端分离项目原因主要有几个。1. 无状态服务器不保存 Session。系统扩展更容易。非常适合分布式系统2. 天然适合前后端分离前端只需要保存 Token。请求时自动携带即可。移动端、小程序也很方便。3. 微服务友好多个服务都可以验证 JWT。不需要共享 Session。例如用户服务 订单服务 支付服务都可以识别同一个 Token。六、JWT 的缺点JWT 并不是完美方案。它也有明显缺点。1. Token 无法主动失效Session 可以服务器直接删除用户立刻下线。但 JWT 已经发给客户端后服务器无法直接收回除非设置短期过期时间加黑名单配合 Redis2. Token 泄露风险如果 JWT 被盗别人就能直接伪装用户因此必须使用 HTTPS不要乱存 Token注意 XSS 攻击3. JWT 不适合存太多数据因为每次请求都会携带 JWT如果 Payload 太大请求体会变大影响性能。七、JWT 为什么成为现代 Web 主流实际上JWT 的流行并不是因为它“高级”。而是因为现代互联网架构变了从单体网站变成前后端分离 微服务 移动端 云原生 分布式系统传统 Session 越来越难适应。而 JWT 的“无状态”特性刚好解决了这些问题。因此JWT 成为了现代 Web 认证的重要方案当然在真实项目里很多大型系统其实是 Session JWT 混合使用。因为没有任何认证方案是绝对完美的。技术的发展本质上一直都是不断在“安全性、性能、复杂度”之间做平衡而 JWT就是现代 Web 在这个平衡中的一个重要选择。
http://www.rkmt.cn/news/1376091.html

相关文章:

  • 匿名内部类的使用场景 java反射机制
  • 小小屠龙原始火龙手游官网下载:小小屠龙原始火龙最新官方下载渠道
  • 普通人如何在 GPT‑5.5 时代保持竞争力:不被替代、学会协作、放大优势
  • IwaraDownloadTool:浏览器扩展视频嗅探引擎深度解析与架构设计
  • 阿里云服务器CPU 100%排查指南:识别伪装挖矿病毒的三步法
  • 鸿蒙PC:Qt适配OpenHarmony实战【书栖】:图书列表、阅读进度和简介卡片的组合实现
  • 卷积神经网络(CNN)与深度学习视觉应用综述
  • 十二周学习报告
  • 免费游戏加速神器OpenSpeedy:5分钟解锁极致流畅体验终极指南 [特殊字符]
  • Laravel vs ThinkPHP:主流PHP框架终极对决
  • 拉普拉斯变换与自注意力机制的革新融合
  • PC端微信消息加密机制与合法数据访问实践
  • 微信小程序ERR_CERT_DATE_INVALID错误深度解析与修复指南
  • 闪卡网页 第五人格 html 开源
  • 从滴滴D²-City到实战:手把手教你用Python脚本构建自己的交通场景YOLO数据集
  • 线性系统理论学懵了?手把手带你推导能控性格拉姆矩阵判据(附详细证明步骤)
  • window11 恢复右键刷新
  • 别再让Ubuntu22.04时间错乱了!用hwclock和timedatectl搞定硬件时钟时区的保姆级教程
  • Web渗透与移动逆向:两种安全范式的本质差异
  • 英雄联盟客户端美化革命:用LeaguePrank打造个性化游戏体验
  • DeepMech:基于图神经网络与模板学习的化学反应机理预测框架
  • 2026年Claude API中转站权威性能与成本榜单 企业级生产场景选型全指南
  • 5大架构优势解析:为什么选择BepInEx进行Unity游戏插件开发
  • RAID5双盘离线还能恢复吗?底层原理与实战抢救指南
  • 机器学习力场(MLFF)在量子材料原子模拟与设计中的实战应用
  • BepInEx 6.0技术揭秘:如何构建跨平台Unity插件框架的5大核心机制
  • Lipschitz常数与傅里叶级数在自动驾驶中的应用
  • BetterJoy:让Switch手柄在PC上完美工作的终极适配工具
  • JSON技术解析
  • ArchPilot:基于多智能体与代理评估的高效神经网络架构搜索框架