JWT签名算法

wen IT资讯 33

本文目录导读:

JWT签名算法

  1. 对称签名算法(HMAC)
  2. 非对称签名算法(RSA / ECDSA / EdDSA)
  3. 特殊或不推荐使用的算法
  4. 推荐选择策略
  5. JWT头中的 alg 字段示例
  6. 关键安全提示

JWT(JSON Web Token)的签名算法主要分为三大类:对称签名(HMAC)非对称签名(RSA/ECDSA/EdDSA) 以及 不签名(none),下面详细说明各类算法及其特点。


对称签名算法(HMAC)

  • 原理:使用同一个密钥(Secret Key)进行签名和验签。
  • 常见算法
    • HS256(HMAC with SHA-256)
    • HS384(HMAC with SHA-384)
    • HS512(HMAC with SHA-512)
  • 特点
    • ✅ 速度快,计算资源消耗小。
    • ❌ 密钥管理风险:发行方和验证方必须共享同一个密钥,任何一方泄露密钥都会导致伪造签名。
  • 适用场景
    • 微服务间信任通信(如内部API网关)。
    • 单服务器应用(方便密钥存储)。

非对称签名算法(RSA / ECDSA / EdDSA)

  • 原理:使用私钥(Private Key)签名,公钥(Public Key)验签。
  • 常见算法
    • RS256 / RS384 / RS512(基于RSA + SHA)
    • ES256 / ES384 / ES512(基于ECDSA + SHA,推荐使用P-256/P-384/P-521曲线)
    • EdDSA(如Ed25519,较新但高效安全)
  • 特点
    • ✅ 公钥可公开分发,私钥仅发行方持有,安全性高。
    • ✅ 适合多方验证(如OAuth 2.0授权服务器、OpenID Connect)。
    • ❌ 相对慢于HMAC,但现代硬件可忽略差距。
  • 适用场景
    • 第三方应用需要验证JWT(如单点登录SSO)。
    • 跨组织、跨服务认证。

特殊或不推荐使用的算法

  • none(无签名算法)alg: "none"
    • 应当禁用!攻击者可以伪造任意JWT而无须密钥。
    • 一些旧库可能默认接受甚至允许none,导致安全漏洞(如CVE-2015-9235)。
  • RSASSA-PSS(如PS256/PS384/PS512)

    比RS256更安全(使用概率签名,抗某些攻击),但兼容性略低。

  • RSA-OAEP:用于JWE(JWT加密),而非JWS签名。

推荐选择策略

场景 推荐算法 原因
内部服务间通信(共享密钥) HS256 速度快,简单
面向第三方验证(如SSO) RS256 或 ES256 安全分发公钥,私钥不外泄
高性能移动端/嵌入式设备验签 ES256(ECDSA) 签名短,计算量小于RSA
极高安全要求且支持现代算法 EdDSA(如Ed25519) 抗量子计算(部分),签名短,性能好
任何情况 禁用 none 和弱算法 避免伪造攻击

JWT头中的 alg 字段示例

{
  "alg": "RS256",
  "typ": "JWT"
}

解码后的Header(Base64)会直接指示验证方式。务必在验证时强制校验alg字段,防止算法替换攻击(Algorithm Substitution Attack)。


关键安全提示

  • 绝不信任alg: none:验证时若遇到none应直接拒绝。
  • 显式指定允许的算法:在验证逻辑中编写白名单(如只允许["RS256"]),避免降级攻击。
  • 密钥管理:HMAC密钥需定期轮换,RSA/ECDSA私钥需严格保护。
  • 使用标准库:如jsonwebtoken(Node.js)、PyJWT(Python)、jjwt(Java)等,避免自己实现签名/验证。

上一篇SAML协议

下一篇Refresh Token轮换

抱歉,评论功能暂时关闭!