一、引言

在现代Web安全体系中,JWT(JSON Web Token)已成为分布式身份认证与授权的事实标准。很多人用过JWT,却未必理解其底层原理、数学安全性与实现细节。我将通过公式推导、流程图和时序图,尽量让我们一起理解JWT的本质。


二、JWT结构与数学表达

2.1 结构剖析

JWT由三部分组成:Header、Payload、Signature。其结构用点.分隔:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

用数学表达:

$$ \text{JWT} = \text{Base64Url}(\text{Header}) \cdot \text{Base64Url}(\text{Payload}) \cdot \text{Base64Url}(\text{Signature}) $$

2.2 签名生成

以HS256(HMAC-SHA256)为例,其签名计算公式为:

$$ \text{Signature} = \text{HMAC}_{SHA256}(\text{secret}, \text{Header}.\text{Payload}) $$

$$ \text{Signature} = H(\text{secret}, m) $$

其中 $m = \text{Base64Url}(\text{Header}) + "." + \text{Base64Url}(\text{Payload})$


三、JWT的安全性与数学底层

3.1 HMAC安全性

HMAC的安全性来自于哈希函数的抗碰撞性和密钥的随机性。其本质:

$$ \operatorname{HMAC}(K, m) = H\left((K' \oplus opad) \parallel H((K' \oplus ipad) \parallel m)\right) $$

  • $K'$:密钥填充到哈希块大小
  • $opad$、$ipad$:外部、内部填充常量

3.2 非对称签名

如RS256,签名与验证过程:

$$ \text{Signature} = \operatorname{Sign}_{\text{private}}(m) $$

$$ \operatorname{Verify}_{\text{public}}(m, \text{Signature}) = \text{true/false} $$


四、JWT的工作流程

4.1 时序图(Mermaid)

JWT时序图.png

4.2 流程图(Mermaid)

JWT流程图.png


五、JWT的典型应用场景与陷阱

  • 单点登录(SSO):跨域认证
  • API认证:微服务间身份传递
  • 常见陷阱

    • 不校验签名算法(alg: none攻击)
    • 密钥泄露
    • 过期时间未合理设置

六、JWT的局限与改进方向

  • 不可撤销:JWT一旦签发,无法主动失效
  • 载荷明文:敏感信息泄露风险
  • 密钥管理:密钥泄漏即全盘皆输

改进方向

  • 引入Token黑名单
  • 缩短有效期,配合Refresh Token
  • 加密Payload(JWE)

标签: none

添加新评论