JWT认证流程(JSON Web Token)

张开发
2026/7/1 13:25:47 15 分钟阅读
JWT认证流程(JSON Web Token)
文章目录JWT 认证流程详解一、JWT 是什么二、完整认证流程阶段一登录 颁发 Token阶段二携带 Token 请求受保护资源阶段三Token 过期 无感刷新三、JWT vs Session 对比四、安全最佳实践五、代码示例Node.js总结JWT 认证流程详解JSON Web TokenJWT是现代 Web 应用中最主流的无状态认证方案之一。本文从原理到实践完整梳理 JWT 的认证流程。一、JWT 是什么JWT 是一种开放标准RFC 7519用于在各方之间以 JSON 对象的形式安全地传输信息。它由三段 Base64URL 编码的字符串组成用.分隔eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyMSJ9.SflKxwRJS ──────────────────── ───────────────────── ────────── Header Payload SignatureHeader声明算法类型如HS256、RS256Payload携带声明Claims如用户 ID、角色、过期时间Signature对前两段用密钥签名防止篡改Payload 是 Base64 编码不加密切勿存放密码等敏感数据。二、完整认证流程阶段一登录 颁发 Token用户提交用户名 密码发送POST /login认证服务查询数据库校验密码哈希bcrypt / Argon2验证通过后服务端用私钥或密钥签名生成 JWT将 JWT 返回给客户端客户端存入localStorage或HttpOnly Cookie阶段二携带 Token 请求受保护资源每次请求在 HTTP Header 中携带 TokenAuthorization: Bearer your_jwt_token服务端 JWT 中间件提取 Token本地验证签名 过期时间无需查数据库验证通过解析 Payload 中的用户信息传递给业务服务处理请求验证失败直接返回401 Unauthorized这正是 JWT无状态的核心优势——服务端不需要存储 Session天然支持水平扩展。阶段三Token 过期 无感刷新Access Token 一般设置较短的有效期15 分钟 ~ 1 小时搭配有效期更长的Refresh Token使用Access Token 过期请求返回401客户端自动携带 Refresh Token 调用POST /auth/refresh服务端验证 Refresh Token通常需查数据库颁发新的 Access Token用户无感知继续使用三、JWT vs Session 对比维度JWTSession存储位置客户端服务端内存/Redis可扩展性天然支持分布式需共享 Session 存储主动吊销困难需黑名单简单删除 Session网络开销Token 较大仅传 Session ID适用场景微服务、API、移动端传统单体 Web 应用四、安全最佳实践存储优先使用HttpOnly Secure Cookie存储 Token防止 XSS 窃取避免存入localStorageXSS 可直接读取。传输始终使用 HTTPS防止 Token 被中间人截获。有效期Access Token 设置短有效期15~60 分钟Refresh Token 可设 7~30 天但须持久化存储以支持吊销。吊销JWT 本身无法主动吊销可通过黑名单Redis或短有效期 刷新策略来规避风险。算法生产环境推荐使用非对称算法RS256私钥签名、公钥验证更安全且支持多服务共享验证能力。五、代码示例Node.jsimportjwtfromjsonwebtoken// 生成 TokenfunctionsignToken(userId){returnjwt.sign({sub:userId,iat:Date.now()},process.env.JWT_SECRET,{expiresIn:15m})}// 验证中间件functionauthMiddleware(req,res,next){consttokenreq.headers.authorization?.split( )[1]if(!token)returnres.status(401).json({error:Missing token})try{req.userjwt.verify(token,process.env.JWT_SECRET)next()}catch{res.status(401).json({error:Invalid or expired token})}}总结JWT 认证的核心思路是将状态从服务端转移到客户端通过数字签名保证不可伪造。它非常适合无状态 API、微服务架构和移动端应用。理解了登录颁发、请求验证、Token 刷新这三个阶段就掌握了 JWT 认证的完整闭环。

更多文章