JWT原理及工作流程详解

发布于:2025-05-10 ⋅ 阅读:(15) ⋅ 点赞:(0)

JSON Web Token(JWT)是一种开放标准(RFC 7519),用于在各方之间安全传输信息。其核心原理是通过结构化、签名或加密的JSON对象实现无状态身份验证和授权。以下是JWT的工作原理和关键组成部分:

1. JWT结构

JWT由三部分组成,用点号(.)分隔:

复制

下载

Header.Payload.Signature

例如:xxxxx.yyyyy.zzzzz

(1) 头部(Header)
  • 作用:声明令牌类型(typ: "JWT")和签名算法(如HS256RS256)。

  • 编码方式:Base64Url编码。

  • 示例:

    json

    {
      "alg": "HS256",
      "typ": "JWT"
    }
(2) 载荷(Payload)
  • 作用:携带用户身份和权限信息(称为“声明”)。

  • 声明类型

    • 注册声明(预定义,如iss签发者、exp过期时间、sub主题)。

    • 公共声明(自定义,需避免冲突)。

    • 私有声明(双方协商的声明)。

  • 编码方式:Base64Url编码。

  • 示例:

    json

    {
      "sub": "1234567890",
      "name": "John Doe",
      "admin": true,
      "exp": 1622544000
    }
(3) 签名(Signature)
  • 作用:验证令牌完整性和真实性,防止篡改。

  • 生成方式:将编码后的Header和Payload用.连接,使用密钥和指定算法签名。

  • 示例(HMAC SHA256算法):

    HMACSHA256(
      base64UrlEncode(header) + "." + base64UrlEncode(payload),
      secretKey
    )

2. JWT工作流程

  1. 用户登录:客户端发送凭证(如用户名/密码)到认证服务器。

  2. 生成JWT:服务器验证凭证,生成JWT并返回给客户端。

  3. 客户端存储:客户端保存JWT(通常为LocalStorage或Cookie)。

  4. 携带JWT请求:客户端在后续请求的Authorization头中携带JWT(如Bearer <token>)。

  5. 服务端验证

    • 拆分JWT,验证签名有效性(使用相同密钥和算法重新计算签名)。

    • 检查声明(如exp是否过期、用户权限等)。

    • 验证通过后,处理请求。


3. 核心特点

  • 无状态:服务端无需存储会话信息,适合分布式系统。

  • 自包含:所有必要信息都包含在令牌中。

  • 安全性:通过签名防止篡改,但需结合HTTPS防止窃听。

  • 灵活性:支持对称(HMAC)和非对称(RSA)加密算法。


4. 注意事项

  • 敏感信息:载荷仅Base64编码(非加密),避免存储密码等敏感数据。

  • 密钥管理:密钥泄露会导致令牌伪造,需严格保护。

  • 令牌有效期:设置合理过期时间(exp),缩短被窃取后的风险窗口。

  • 废止机制:JWT无法直接废止,需借助黑名单或短期有效期。


5. 适用场景

  • 跨域认证(如单点登录SSO)。

  • API无状态身份验证。

  • 客户端与微服务间的安全通信。


通过上述机制,JWT实现了高效、安全的身份验证,但需结合实际需求权衡其无状态特性和潜在的安全风险。


网站公告

今日签到

点亮在社区的每一天
去签到