一文读懂 JWT 无状态身份认证的核心原理

张开发
2026/4/8 23:45:17 15 分钟阅读

分享文章

一文读懂 JWT 无状态身份认证的核心原理
JWT 是目前前后端分离、微服务架构中最常用的无状态身份认证方案。本文用简洁易懂的方式带你快速掌握 JWT 的签发、传递与校验核心逻辑轻松理解其工作原理与安全机制。一、什么是JWTJWTJSON Web Token是一种轻量级的令牌格式标准对应标准规范 RFC 7519。它本质是一段加密的 JSON 字符串包含了用户身份信息和校验信息可在客户端和服务端之间安全传递实现“无状态鉴权”无需存储在服务器数据库中无状态验证时仅需验证签名合法性即可。二、JWT的结构解析一个完整的 JWT 令牌由 3 部分组成用.连接格式为Header.Payload.Signature1. Header头部头部主要包含两个信息令牌类型typ和加密算法alg默认使用HS256HMAC SHA256算法。示例Base64编码前{typ:JWT,alg:HS256}头部会经过 Base64编码可逆成为JWT的第一部分。2. Payload载荷载荷是 JWT 的核心载体用于存储需要传递的用户信息如用户ID、用户名、角色和一些标准声明可选。声明分三类注册声明Registered Claimsiss(Issuer)签发者sub(Subject)主题用户 IDaud(Audience)受众exp(Expiration Time)过期时间nbf(Not Before)生效时间iat(Issued At)签发时间jti(JWT ID)唯一 ID防重放公共声明Public Claims自定义字段需在IANA 注册表注册或用 URI 命名防冲突私有声明Private Claims双方约定的自定义字段不公开示例Base64编码前{sub:123456,username:admin,role:superadmin,exp:1717248000,iat:1714656000}⚠️ 注意Payload 部分的 Base64 编码是可逆的不能存储敏感信息如密码、手机号等仅适合存储非敏感的用户标识信息。3. Signature签名签名是 JWT实现防篡改的核心其核心作用有两个验证令牌在传输过程中是否被非法篡改确认令牌确实由合法的服务端签发避免恶意伪造的令牌通过认证签名的生成严格遵循固定逻辑完全依赖 Header 中指定的加密算法以最常用的 HS256即 HMAC SHA256算法为例签名生成公式示意如下HMACSHA256( base64UrlEncode(Header) . base64UrlEncode(Payload), secret // 服务端独有密钥不可泄露给客户端 )对 JWT 的 Header、Payload 部分进行 Base64Url 编码注意是 Base64Url 编码而非标准 Base64可避免 URL 中的特殊字符冲突将编码后的 Header 和 Payload 用英文句号.连接形成字符串base64UrlEncode(Header) . base64UrlEncode(Payload)使用 Header 中指定的加密算法结合密钥secret对上述拼接后的字符串进行加密最终生成的加密结果即为 Signature签名。⚠️ 注意服务端的密钥secret是签名生成和验证的核心必须严格保密严禁泄露给客户端如前端页面、APP 客户端。一旦密钥泄露攻击者可伪造任意 Header 和 Payload并生成合法签名从而绕过身份认证造成安全风险。三、JWT 完整工作流程JWT的工作流程非常简洁核心分为“登录签发令牌”和“后续请求验证令牌”两个阶段全程无状态无需服务端存储额外信息。阶段1登录认证签发JWT令牌用户首次登录时服务端完成身份校验并生成 JWT 令牌具体步骤如下用户在客户端网页、APP等输入用户名和密码发起登录请求服务端接收请求后对用户名和密码的合法性进行校验如查询数据库进行比对校验通过后服务端根据用户信息如用户ID、角色权限等非敏感数据生成 JWT 的Header头部和 Payload载荷再结合服务端密钥生成 Signature签名最终拼接成完整的JWT令牌服务端将生成的 JWT 令牌返回给客户端。阶段2后续请求验证JWT令牌用户登录成功后后续发起所有业务接口请求时均需携带 JWT 令牌完成身份验证。验证原理JWT 的 Signature签名具有不可逆特性服务端在验证时会使用与签发时完全相同的加密算法和密钥重新计算签名并与令牌中原签名比对若一致说明 Header 和 Payload 未被篡改若不一致则表明数据被篡改令牌无效。具体验证步骤如下客户端收到 JWT 令牌后进行本地存储如localStorage、Cookie、pinia客户端后续发起业务接口请求时需在请求头中携带 JWT 令牌标准格式如下Authorization:Bearertoken服务端接收请求后从请求头中提取 JWT 令牌服务端按英文句号.将令牌拆分为Header、Payload、Signature三部分服务端使用相同的密钥和加密算法对编码后的Header、Payload重新生成签名对比重新生成的签名与原令牌的Signature若签名不一致说明令牌被篡改拒绝请求若签名一致继续校验 Payload 中的exp过期时间未过期则验证通过。验证通过后服务端从 Payload 中解析出用户信息如用户ID执行后续业务逻辑返回请求结果。

更多文章