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

JWT认证流程(JSON Web Token)

文章目录

  • JWT 认证流程详解
    • 一、JWT 是什么?
    • 二、完整认证流程
      • 阶段一:登录 & 颁发 Token
      • 阶段二:携带 Token 请求受保护资源
      • 阶段三:Token 过期 & 无感刷新
    • 三、JWT vs Session 对比
    • 四、安全最佳实践
    • 五、代码示例(Node.js)
    • 总结

JWT 认证流程详解

JSON Web Token(JWT)是现代 Web 应用中最主流的无状态认证方案之一。本文从原理到实践,完整梳理 JWT 的认证流程。


一、JWT 是什么?

JWT 是一种开放标准(RFC 7519),用于在各方之间以 JSON 对象的形式安全地传输信息。它由三段 Base64URL 编码的字符串组成,用.分隔:

eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyMSJ9.SflKxwRJS ──────────────────── ───────────────────── ────────── Header Payload Signature
  • Header:声明算法类型,如HS256RS256
  • Payload:携带声明(Claims),如用户 ID、角色、过期时间
  • Signature:对前两段用密钥签名,防止篡改

Payload 是 Base64 编码,不加密,切勿存放密码等敏感数据。


二、完整认证流程

阶段一:登录 & 颁发 Token

  1. 用户提交用户名 + 密码,发送POST /login
  2. 认证服务查询数据库,校验密码哈希(bcrypt / Argon2)
  3. 验证通过后,服务端用私钥或密钥签名生成 JWT
  4. 将 JWT 返回给客户端,客户端存入localStorageHttpOnly Cookie

阶段二:携带 Token 请求受保护资源

  1. 每次请求在 HTTP Header 中携带 Token:
    Authorization: Bearer <your_jwt_token>
  2. 服务端 JWT 中间件提取 Token,本地验证签名 + 过期时间,无需查数据库
  3. 验证通过:解析 Payload 中的用户信息,传递给业务服务处理请求
  4. 验证失败:直接返回401 Unauthorized

这正是 JWT无状态的核心优势——服务端不需要存储 Session,天然支持水平扩展。

阶段三:Token 过期 & 无感刷新

Access Token 一般设置较短的有效期(15 分钟 ~ 1 小时),搭配有效期更长的Refresh Token使用:

  1. Access Token 过期,请求返回401
  2. 客户端自动携带 Refresh Token 调用POST /auth/refresh
  3. 服务端验证 Refresh Token(通常需查数据库),颁发新的 Access Token
  4. 用户无感知,继续使用

三、JWT vs Session 对比

维度JWTSession
存储位置客户端服务端(内存/Redis)
可扩展性天然支持分布式需共享 Session 存储
主动吊销困难(需黑名单)简单(删除 Session)
网络开销Token 较大仅传 Session ID
适用场景微服务、API、移动端传统单体 Web 应用

四、安全最佳实践

存储:优先使用HttpOnly + Secure Cookie存储 Token,防止 XSS 窃取;避免存入localStorage(XSS 可直接读取)。

传输:始终使用 HTTPS,防止 Token 被中间人截获。

有效期:Access Token 设置短有效期(15~60 分钟),Refresh Token 可设 7~30 天但须持久化存储以支持吊销。

吊销:JWT 本身无法主动吊销,可通过黑名单(Redis)短有效期 + 刷新策略来规避风险。

算法:生产环境推荐使用非对称算法(RS256),私钥签名、公钥验证,更安全且支持多服务共享验证能力。


五、代码示例(Node.js)

importjwtfrom'jsonwebtoken'// 生成 TokenfunctionsignToken(userId){returnjwt.sign({sub:userId,iat:Date.now()},process.env.JWT_SECRET,{expiresIn:'15m'})}// 验证中间件functionauthMiddleware(req,res,next){consttoken=req.headers.authorization?.split(' ')[1]if(!token)returnres.status(401).json({error:'Missing token'})try{req.user=jwt.verify(token,process.env.JWT_SECRET)next()}catch{res.status(401).json({error:'Invalid or expired token'})}}

总结

JWT 认证的核心思路是:将状态从服务端转移到客户端,通过数字签名保证不可伪造。它非常适合无状态 API、微服务架构和移动端应用。理解了登录颁发、请求验证、Token 刷新这三个阶段,就掌握了 JWT 认证的完整闭环。

http://www.jsqmd.com/news/643729/

相关文章:

  • 终极免费解决方案:RDPWrap实现Windows远程桌面多用户连接完整指南
  • 【Diy-LLM】Task 1 分词器
  • PINN实战避坑指南:PyTorch训练中的常见错误与调优技巧(以Burgers方程为例)
  • lychee-rerank-mm快速体验:一键部署智能排序工具
  • 从GKCTF 2021 CheckBot看CSRF攻击的实战应用
  • 终极指南:如何免费解锁《原神》60FPS限制,让游戏帧率飙升!
  • 国产GIS神器SXEarth+MapGIS10实战:5分钟搞定遥感影像与高程数据下载及三维可视化
  • Linux命令:hibernate
  • LangChain4j实战:手把手教你用Tools工具解决大模型“幻觉”,让AI准确获取当前日期和实时数据
  • **发散创新:基于RBAC模型的开源权限管理系统设计与实现**在现代软件架构中,权限控制
  • 2026年室内灯具品牌推荐:品质与健康照明的优选 - 品牌排行榜
  • SVG、XML 及其生态技术全景指南:从基础规范到工程实践
  • inquire 日期选择器 DateSelect 完全指南:交互式日历实现原理
  • Chart.js项目实战:科学研究数据可视化完整指南
  • Phi-4-Reasoning-Vision惊艳效果:同一张图在THINK/NOTHINK模式下的推理差异
  • Local SDXL-Turbo实操手册:从键盘输入到画面生成的完整链路
  • 基于SpringBoot+Vue音乐推荐系统设计与实现+毕业论文+指导搭建视频
  • 别再死磕理论了!用SolidWorks Simulation做结构优化,从设计算例到拓扑算例保姆级避坑指南
  • 2026年优质灯具品牌推荐:聚焦LED照明领域实力之选 - 品牌排行榜
  • PyTorch 2.9 效果实测:一键部署,体验GPU加速的模型训练速度
  • 05樊珍4月14
  • 终极戴尔G15散热控制指南:开源神器TCC-G15完全解析
  • CLAP-htsat-fused高兼容:Windows/Mac/Linux全平台Docker支持
  • Towards-Realtime-MOT性能评估与调优:如何达到MOTA 64%+的跟踪精度
  • 3分钟快速上手:XUnity.AutoTranslator终极Unity游戏汉化指南
  • 4步快速完成B站视频转文字:免费开源工具bili2text终极指南
  • 【AI】操作审计:所有执行行为可追溯
  • 2026年停车场照明品牌技术发展与应用场景分析 - 品牌排行榜
  • Gokapi与OpenID Connect集成:企业级身份认证配置全指南
  • 3步解锁外语视频自由:PotPlayer百度翻译插件完全指南