JWT鉴权的庖丁解牛

JWT(JSON Web Token)鉴权是一种无状态、自包含的认证机制,其核心在于“信任签名,而非存储”


一、JWT 结构:三段式 Base64Url 编码

xxxxx.yyyyy.zzzzz ↑ ↑ ↑ Header.Payload.Signature
1.Header(头部)
  • 内容
    {"alg":"HS256","typ":"JWT"}
  • 作用:声明签名算法(alg)和令牌类型(typ)。
  • 编码:Base64Url →eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
2.Payload(载荷)
  • 内容:业务数据 + 标准声明(Claims)
    {"sub":"1234567890",// 主题(用户ID)"name":"John Doe","admin":true,"iat":1516239022,// 签发时间"exp":1516242622// 过期时间(关键!)}
  • 标准 Claims
    • iss(签发者)、sub(主题)、aud(受众)
    • exp(过期时间)、nbf(生效时间)、iat(签发时间)
  • 编码:Base64Url →eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ

⚠️Payload 未加密!任何人可解码查看内容(仅防篡改,不防窥探)。

3.Signature(签名)
  • 生成方式
    HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret_key )
  • 作用:验证令牌未被篡改,且由可信方签发。
  • 编码:二进制签名 → Base64Url

关键:只有服务端持有secret_key,能生成/验证签名。


二、鉴权流程:无状态交互

ServerClientServerClientPOST /login (username, password)验证凭证返回 JWT (access_token)GET /api/profile (Header: Authorization: Bearer <JWT>)1. 解码 JWT2. 验证签名3. 检查 exp/iss/aud返回受保护资源
关键步骤(服务端验证):
  1. 解析 Token:按.分割三段。
  2. 验证签名:用本地secret_key重新计算签名,比对是否一致。
  3. 校验 Claims
    • exp是否过期
    • iss是否可信
    • aud是否匹配当前服务
  4. 提取用户身份:从sub或自定义字段获取用户 ID。

无状态:服务端无需存储 JWT,所有信息自包含。


三、签名算法:对称 vs 非对称

算法类型示例密钥管理适用场景
对称加密HS256, HS512单一secret_key(服务端保管)单体应用、内部服务
非对称加密RS256, ES256私钥(签发)+ 公钥(验证)多服务、OAuth 2.0
为什么推荐 RS256?
  • 安全隔离:验证方只需公钥,即使泄露也无法伪造 Token。
  • 避免密钥分发:微服务架构中,各服务用同一公钥验证,无需共享secret_key

⚠️绝对禁止

  • 使用none算法(无签名)
  • 客户端可控制alg字段(导致算法混淆攻击)

四、核心安全陷阱与对策

1.Token 泄露 = 账号被盗
  • 原因:JWT 一旦签发,在exp前始终有效。
  • 对策
    • 短有效期:Access Token 设为 15~30 分钟。
    • Refresh Token 机制
      • Access Token 过期后,用 Refresh Token(存储在 HttpOnly Cookie)换取新 Token。
      • Refresh Token 可撤销(需服务端存储黑名单或状态)。
2.无法主动失效
  • 问题:用户登出后,旧 Token 仍有效(因无状态)。
  • 对策
    • 短期 Token:降低风险窗口。
    • Token 黑名单:登出时将 Token 加入 Redis(jti+exp),验证时检查。
    • 版本号机制:用户表存token_version,Payload 中带版本,不匹配则拒绝。
3.敏感信息泄露
  • 问题:Payload 可被 Base64 解码。
  • 对策绝不存放密码、身份证号等敏感数据
4.重放攻击(Replay Attack)
  • 问题:截获 Token 后重复使用。
  • 对策
    • 加入jti(JWT ID) + 服务端记录已用 ID(短期存储)。
    • 绑定客户端指纹(IP、User-Agent),但影响体验。

五、与 Session 对比

特性JWTSession
状态无状态(服务端不存)有状态(服务端存 Session)
扩展性天然适合分布式需共享 Session 存储(Redis)
安全性依赖签名 + 短期有效依赖 Cookie 安全(HttpOnly, Secure)
撤销困难(需额外机制)简单(删除 Session)
体积较大(含 Payload)小(仅 Session ID)

选型建议

  • API 服务、移动端→ JWT
  • 传统 Web 应用→ Session(更易管理登出、CSRF)

六、工程最佳实践

  1. Always use HTTPS:防止 Token 被中间人截获。
  2. Never store secrets in payload:Payload 是公开的。
  3. Validate all claimsexp,iss,aud必须校验。
  4. Use strong keys
    • HS256:secret_key≥ 32 字节随机字符串
    • RS256:RSA 2048 位以上
  5. Implement refresh token rotation:每次刷新返回新 Refresh Token,旧的立即失效。

总结

  • JWT 不是银弹:它解决的是无状态认证问题,而非所有安全问题。
  • 核心价值:去中心化验证、跨域支持、减少 DB 查询。
  • 致命缺陷:无法主动失效、信息泄露风险。
  • 正确姿势短期 Access Token + 可撤销 Refresh Token + 严格 Claim 校验

💡一句话本质
JWT 是“一次性密码本”,签名保证真实性,有效期控制风险窗口。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1135940.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

d3dx9_30.dll文件丢失找不到问题 免费下载方法分享

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…

计算机毕业设计springboot实习生校内事务管理系统 基于Spring Boot的实习生校园事务综合管理系统 Spring Boot驱动的实习生校内事务信息化平台

计算机毕业设计springboot实习生校内事务管理系统b29h3 &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。随着信息化时代的快速发展&#xff0c;传统的实习生校内事务管理方式面临…

机器学习:强化学习算法

摘要&#xff1a;强化学习是机器学习的一个分支&#xff0c;通过智能体与环境的交互来学习最优策略。核心要素包括智能体、环境、状态、动作、奖励和策略。智能体通过试错过程&#xff0c;根据环境反馈的奖励调整策略&#xff0c;目标是最大化长期累积奖励。主要算法包括基于价…

【无宏恐惧】告别VBA禁用!用纯BAT脚本实现Excel复杂档案编号批量生成

当Excel弹出“宏已被禁用”的警告时&#xff0c;你的自动化方案是否就此夭折&#xff1f;面对单位严格的IT安全政策&#xff0c;VBA方案常常无法执行。但工作还得继续——1000份学生档案&#xff0c;每份1-5册不等&#xff0c;需要生成符合复杂规则的编号、索引号。本文提供一套…

VHDL课程设计大作业:自动生成状态转移表方法

让状态机设计不再“头大”&#xff1a;一种高效生成VHDL状态转移表的实战方法你有没有在做VHDL课程设计大作业时&#xff0c;对着一张密密麻麻的状态图发愁&#xff1f;明明逻辑想清楚了&#xff0c;可一到写状态转移表就漏条件、跳错状态&#xff1b;改一次需求&#xff0c;整…

时序逻辑电路入门必看:基本概念与工作原理通俗解释

从“记忆”说起&#xff1a;深入理解时序逻辑电路的核心机制你有没有想过&#xff0c;为什么你的手机能记住上一条微信消息&#xff1f;为什么电脑可以一步步执行程序&#xff0c;而不是像计算器一样算完就忘&#xff1f;答案其实藏在一个看似冷门、实则无处不在的技术里——时…

es连接工具在日志分析系统中的核心作用:一文说清

日志系统里的“搬运工”没那么简单&#xff1a;揭秘 es连接工具的实战价值你有没有遇到过这种情况——线上服务突然报错&#xff0c;你急着查日志定位问题&#xff0c;结果发现Kibana里半天刷不出数据&#xff1f;或者好不容易查到了日志&#xff0c;字段全是乱的&#xff0c;s…

第 1 篇:《SpringBoot 启动慢到宕机?阿里 P7 手写的 9 个生产级方案,3 分钟→28 秒(附一键优化插件)》

真实痛点&#xff08;带血泪损失&#xff09;新手&#xff1a;启动慢 调试慢&#xff0c;每天浪费 2 小时&#xff0c;月薪 1 万 每月白扔 2500 块&#xff1b;中级开发&#xff1a;生产扩容时启动超时→熔断降级→订单流失&#xff0c;某生鲜项目因此损失72 万&#xff1b;面…

一文说清vivado安装教程2018全流程及依赖组件

从零开始搭建FPGA开发环境&#xff1a;Vivado 2018.3 安装实战全记录 你是不是也经历过这样的场景&#xff1f;刚拿到一块Zynq开发板&#xff0c;满心欢喜想跑个“Hello World”&#xff0c;结果第一步就被卡在了 安装Vivado 上——界面打不开、驱动装不上、许可证报错……折…

目前国内专注于企业系统集成服务的 AI 智能体有哪些?

过去一年&#xff0c;“AI 智能体” 几乎成了企业数字化领域的高频词。但真正深入到企业内部去看&#xff0c;会发现一个明显分化&#xff1a;很多智能体更像个人效率工具&#xff0c;适合写内容、查资料、做总结&#xff0c;却很难在企业真实业务中长期承担责任 —— 它们无法…

零基础小白指南:轻松搞定Intel HAXM配置

零基础也能搞定&#xff1a;彻底解决 Android 模拟器卡顿问题&#xff0c;让 AVD 飞起来&#xff01; 你是不是也遇到过这种情况&#xff1f;兴冲冲打开 Android Studio&#xff0c;新建一个 AVD&#xff08;Android Virtual Device&#xff09;&#xff0c;点击运行——结果弹…

智能审计AI助手日志分析模块设计:AI应用架构师教你构建实时审计监控系统

智能审计AI助手日志分析模块设计&#xff1a;AI应用架构师教你构建实时审计监控系统 摘要/引言 在当今数字化时代&#xff0c;企业运营产生的数据量呈爆炸式增长&#xff0c;传统的审计方式面临着效率低下、准确性不足等挑战。本文旨在解决如何构建一个智能审计AI助手的日志分…

机器学习-Q学习

摘要&#xff1a;Q学习是一种基于价值的强化学习算法&#xff0c;通过迭代优化智能体的决策行为。其核心是Q值函数&#xff0c;利用时序差分法和贝尔曼方程评估状态-行动对的预期奖励。算法流程包括Q表初始化、状态观测、行动决策、奖励评估和Q表更新等步骤。Q学习具有无模型、…

iPaaS 在餐饮行业的最佳实践分享

餐饮数字化不只是装个系统 对连锁餐饮企业来说&#xff0c;数字化涉及多个环节&#xff1a;前端的点餐、小程序和外卖平台&#xff0c;中台的会员和营销管理&#xff0c;后端的供应链和财务&#xff0c;还有门店的日常运营。这些系统通常来自不同供应商&#xff0c;标准不一&am…

Redis过期键删除策略:揭秘背后的高效管理机制

文章目录Redis 过期键的删除策略 ?引言一、Redis 过期键概述1. 为什么需要过期键&#xff1f;2. 过期键如何影响系统性能&#xff1f;二、Redis 过期键的删除策略1. 主动删除&#xff08;Active Expiration&#xff09;背后的实现原理主动删除的优点主动删除的缺点2. 被动删除…

文件夹内的文件如何一键压缩为多个独立压缩包

有时候我们需要将文件夹内的多个文件或子文件夹进行压缩&#xff0c;以便于存储或传输。如果一个个手动压缩&#xff0c;不仅效率低下&#xff0c;还容易出错。那么&#xff0c;有没有一种批量操作的方法&#xff0c;可以让我们快速将每个文件夹内的内容压缩成独立的压缩包呢&a…

QTabWidget样式表兼容性:Qt5到Qt6深度剖析

从Qt5到Qt6&#xff0c;QTabWidget样式为何“突然失效”&#xff1f;一文讲透兼容性陷阱与平滑迁移方案你有没有遇到过这种情况&#xff1a;项目从Qt5升级到Qt6后&#xff0c;原本好好的标签页控件QTabWidget突然变得“透明”了&#xff1f;标签背景没了、圆角消失了、悬停效果…

无源蜂鸣器声音生成原理:结合PWM脉冲解析

无源蜂鸣器是如何“唱歌”的&#xff1f;从PWM脉冲讲起你有没有想过&#xff0c;家里门铃那声清脆的“叮咚”&#xff0c;或是微波炉加热结束时的“嘀——”&#xff0c;背后其实藏着一个简单的物理原理&#xff1f;这些声音大多来自一种叫无源蜂鸣器的小元件。它不像喇叭那样能…

一文说清ST7735工作原理与引脚定义

搞懂ST7735&#xff1a;从引脚到显示&#xff0c;一屏背后的工程细节 你有没有遇到过这样的场景&#xff1f;接上一块1.8寸彩屏&#xff0c;代码烧进去&#xff0c;结果屏幕要么全白、要么发紫&#xff0c;甚至干脆没反应。调试半天&#xff0c;发现不是线接错了&#xff0c;就…

HID键盘矩阵扫描原理:新手入门必看教程

HID键盘矩阵扫描原理&#xff1a;从零搞懂按键是如何被“看见”的你有没有想过&#xff0c;当你按下机械键盘上一个键时&#xff0c;电脑是怎么知道哪个键被按下的&#xff1f;看起来简单的一个动作&#xff0c;背后其实藏着一套精巧的工程设计——矩阵扫描&#xff08;Matrix …