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

从 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 在这个平衡中的一个重要选择。

相关文章:

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

文章目录 前言一、Web 认证系统的发展史1.第一代认证方案:Cookie Session2.Session 方案的问题开始出现1. Session 存储压力大2. 分布式系统难处理3. 移动端时代到来 二、JWT 是什么三、JWT 的结构到底长什么样1.第一部分:Header(头部&#…...

匿名内部类的使用场景 java反射机制

一、匿名内部类的使用场景匿名内部类是一种没有显式类名、直接在创建对象时定义并实例化的内部类。它通常用于“一次性使用”的场景,让代码更简洁紧凑。主要使用场景包括:1. 事件监听器(GUI 编程)在 Swing、AWT 或 Android 开发中…...

小小屠龙原始火龙手游官网下载:小小屠龙原始火龙最新官方下载渠道

《小小屠龙原始火龙》又名《赤血火龙单职业》《龙城秘境移动版》,是由安徽游昕联合忆往游戏运营的正版 1.80 火龙复刻 MMORPG 手游。1:1 复刻比奇、盟重土城、祖玛寺庙、赤月峡谷、火龙神殿等经典场景,创新融合战法道三职业核心能力的单职业体系&#xf…...

IwaraDownloadTool:简单快速的Iwara视频下载神器

IwaraDownloadTool:简单快速的Iwara视频下载神器 【免费下载链接】IwaraDownloadTool Iwara 下载工具 | Iwara Downloader 项目地址: https://gitcode.com/gh_mirrors/iw/IwaraDownloadTool 你是否经常在Iwara平台发现精彩的视频内容,却苦于无法轻…...

Codex适配国产信创环境安装部署与技术适配全解析

随着国家信创产业持续落地推进,党政、金融、能源、工业等关键行业全面开启信息技术软硬件国产化替代工作。基于自主可控、安全可信的核心需求,传统国外架构软硬件体系逐步被国产操作系统、国产芯片硬件替代。Codex作为主流的智能代码辅助、自动化开发工具…...

FPGA在遥感机器学习中的优势与优化实践

1. FPGA在遥感机器学习中的核心优势解析 FPGA(现场可编程门阵列)在边缘计算场景中展现出独特的价值主张。与通用处理器不同,FPGA通过硬件级并行架构实现两个关键突破:首先是数据流驱动的计算模式,消除传统冯诺依曼架构…...

数据集上新:柬埔寨环境健康入户调查

本数据集基于柬埔寨马德望省约400户家庭的环境健康入户调查而成,包括基本社会经济信息、家庭成员结构、呼吸道健康信息、其他健康信息(包括部分测量信息)、营养信息、清洁炉灶和燃料使用、风险和时间偏好、调查员自观察信息等数百条子数据。如…...

卷积神经网络(CNN)与深度学习视觉应用综述

在深度学习领域,卷积神经网络(CNN)是实现计算机视觉任务的基石。通过对这些基础理论的学习,我们能够构建起从特征提取到复杂场景理解的知识体系。第一部分:卷积神经网络基础1. 全连接网络面临的挑战传统的全连接神经网…...

3分钟快速修复洛雪音乐播放问题:六音音源完整指南

3分钟快速修复洛雪音乐播放问题:六音音源完整指南 【免费下载链接】New_lxmusic_source 六音音源修复版 项目地址: https://gitcode.com/gh_mirrors/ne/New_lxmusic_source 你是否曾经在升级洛雪音乐后,发现心爱的歌单突然变成了灰色,…...

Go语言竞态检测:race条件

Go语言竞态检测:race条件 1. race检测 go test -race ./...2. 总结 -race检测器可以发现代码中的数据竞争。...

window11 恢复右键刷新

新建文本文档,粘贴下方代码,后缀改成 **.bat**,右键以管理员身份运行即可一键恢复传统右键菜单echo off reg add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32" /f /ve taskkill /f /im e…...

鸿蒙PC:Qt适配OpenHarmony实战【番茄刻】:工作和休息两种倒计时如何写成一个 QML 状态机

前言 欢迎加入鸿蒙PC开发者社区,共同打造开发者工具生态:鸿蒙PC开发者社区 :https://harmonypc.csdn.net/ 项目开源地址:https://atomgit.com/lqjmac/qtfqk 我更愿意把这类 Demo 当成工程切片来看:功能要小&#xf…...

手把手教你:把Ubuntu 20.04完整系统塞进U盘,打造随身便携开发环境

手把手打造Ubuntu 20.04便携开发环境:从镜像制作到硬件兼容全指南 在咖啡厅调试代码时发现环境配置丢失?出差临时借用同事电脑却无法运行你的开发工具?这些困扰程序员多年的痛点,其实只需要一个装满完整Ubuntu系统的U盘就能彻底解…...

别再让Ubuntu22.04时间错乱了!用hwclock和timedatectl搞定硬件时钟时区的保姆级教程

彻底解决Ubuntu 22.04时间同步问题:硬件时钟与时区管理权威指南你是否曾在双系统切换后发现Ubuntu显示的时间比实际快了8小时?或者每次重启后系统时间都会"跳票"?这些看似小问题背后,隐藏着操作系统与硬件时钟&#xff…...

直接去偏机器学习:用Bregman散度统一因果推断与协变量平衡

1. 项目概述与核心动机在因果推断、政策评估乃至更广泛的计量经济学和机器学习应用中,我们常常关心一个“目标参数”,比如平均处理效应(ATE)——也就是某项干预或政策对结果的平均影响。传统上,一个非常自然的想法是&a…...

Seraphine:英雄联盟玩家的智能游戏助手完整指南

Seraphine:英雄联盟玩家的智能游戏助手完整指南 【免费下载链接】Seraphine 英雄联盟战绩查询工具 项目地址: https://gitcode.com/gh_mirrors/se/Seraphine Seraphine是一款基于英雄联盟官方LCU API开发的智能游戏助手,专为《英雄联盟》玩家设计…...

基于机器学习与RIS的毫米波用户角度定位:四波束探测实现低开销波束管理

1. 项目概述:当RIS遇见机器学习,如何用四个波束“锁定”用户? 在毫米波频段玩无线通信,就像在一条狭窄却充满障碍物的高速公路上开跑车。速度是快了,但一个不小心,信号就被墙、人甚至一片树叶给“堵”得严严…...

BepInEx 6.0技术揭秘:如何构建跨平台Unity插件框架的5大核心机制

BepInEx 6.0技术揭秘:如何构建跨平台Unity插件框架的5大核心机制 【免费下载链接】BepInEx Unity / XNA game patcher and plugin framework 项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx 在Unity游戏开发领域,插件框架的技术实现一…...

猫抓:5步掌握网页资源嗅探工具,轻松下载全网视频

猫抓:5步掌握网页资源嗅探工具,轻松下载全网视频 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 还在为网页上的精彩视频无…...

Terraform 实战:用 for 表达式将列表元素转换为大写

Terraform 技巧:使用 for 表达式将列表元素转换为大写 在 Terraform 配置中,我们经常需要对列表中的字符串进行批量转换,例如将小写名称统一转为大写,以满足某些标签规范或命名约定。本文以 var.names 列表为例,演示如何通过 for 表达式结合 upper 函数,生成一个全大写的…...

迁移学习与随机森林在乳腺癌预后模型中的实践与优化

1. 项目概述与核心价值在临床肿瘤学,尤其是乳腺癌治疗领域,一个精准的预后模型不仅是冰冷的统计工具,更是连接医生决策与患者希望的生命线。传统的预后工具,如基于临床病理特征的诺丁汉预后指数或更现代的基因组学工具&#xff08…...

OpenClaw 架构解析:Skill 与 Agent 的设计哲学与实现机制

摘要:本文深入剖析 OpenClaw 框架中 Skill 和 Agent 的核心概念、设计理念及协同机制,帮助开发者理解其模块化架构,并掌握最佳实践。 背景与问题 为什么需要 Skill? 在构建 AI Agent 系统时,我们面临几个核心挑战&am…...

深度学习在碳离子治疗剂量计算中的应用:U-Net、GAN与扩散模型对比

1. 项目概述:当深度学习遇上碳离子治疗剂量计算在放射治疗领域,尤其是像碳离子治疗这样的先进粒子疗法中,剂量计算的精度和速度是决定治疗成败的关键。碳离子因其独特的“布拉格峰”物理特性,能够将高剂量能量精准地沉积在肿瘤靶区…...

告别误报!用SCTransNet+Transformer搞定红外小目标检测(附PyTorch实战代码)

突破红外小目标检测瓶颈:SCTransNet与Transformer的实战融合在安防监控、遥感测绘和军事预警等关键领域,红外小目标检测技术正面临前所未有的挑战。当目标尺寸小于1010像素、信噪比低于2dB时,传统算法在复杂背景下的误报率往往高达30%以上。这…...

中医馆升级|结合瑞式养老模式的医养结合完整落地方案

传统中医馆最大瓶颈是:客流老化、单次交易、依赖坐诊、复购不稳定、没有社区刚需流量。中医馆最高级的升级路径,不是继续做针灸开药,而是转型社区银发康养中心,嫁接瑞式养老标准化体系,打造「中医诊疗瑞式社区养老」双…...

topcode【随机算法题】【2026.5.24打卡-java版本】

最长有效括号 要点&#xff1a;栈&#xff0c;push下标 class Solution {public int longestValidParentheses(String s) {//栈//放前哨-1Deque<Integer> stack new ArrayDeque<>();stack.push(-1);int ans 0;for(int i 0; i < s.length(); i){char c s.…...

5分钟上手:用LeaguePrank打造专属英雄联盟客户端

5分钟上手&#xff1a;用LeaguePrank打造专属英雄联盟客户端 【免费下载链接】LeaguePrank 项目地址: https://gitcode.com/gh_mirrors/le/LeaguePrank 想要让你的英雄联盟客户端界面变得与众不同吗&#xff1f;LeaguePrank是一款基于官方LCU API开发的英雄联盟客户端美…...

《道德经》第二十章

本章以绝学无忧我独昏昏为核心&#xff0c;专讲体道者超越世俗价值、回归生命本源的精神境界&#xff0c;是老子自我写照式的抒情篇章。以“唯阿善恶相去几何”的追问破题&#xff0c;以“众人熙熙”与“我独泊兮”的强烈对比展开&#xff0c;最终以“贵食母”点明与道合一的生…...

华硕笔记本终极优化指南:如何用G-Helper轻量级工具全面提升使用体验

华硕笔记本终极优化指南&#xff1a;如何用G-Helper轻量级工具全面提升使用体验 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook…...

别再折腾VMware Tools了!用FileZilla+SSH搞定Windows与Ubuntu虚拟机文件互传(保姆级教程)

告别VMware Tools烦恼&#xff1a;SSHFileZilla实现跨平台文件传输全攻略 每次在Windows和Ubuntu虚拟机之间传输文件时&#xff0c;VMware Tools总是给你带来各种麻烦&#xff1f;安装失败、兼容性问题、功能受限...这些问题我都经历过。今天我要分享的是一种更稳定、更通用的…...