---

title: JWT 与 JWK 密钥轮换与 RS256 验证实践

keywords:

  • JWT
  • JWK
  • RS256
  • kid
  • 密钥轮换

description: 采用 JWK 进行密钥轮换与 RS256 验证,覆盖 JWK 拉取、kid 选择、签名验证与安全注意事项。

categories:

  • 文章资讯
  • 技术教程

---

JWT 与 JWK 密钥轮换与 RS256 验证实践

JWK 端点与示例

GET /.well-known/jwks.json
{
  "keys": [
    { "kty": "RSA", "kid": "2025-11", "use": "sig", "alg": "RS256", "n": "...", "e": "AQAB" }
  ]
}

验证流程

  1. 解析 JWT 头部,读取 alg=RS256kid
  2. 拉取 JWK,按 kid 选择公钥
  3. base64url(header) + '.' + base64url(payload) 作为消息,使用选定公钥验证签名

Node.js 验证示例(使用 PEM 公钥)

const crypto = require('crypto');
function verifyRS256(message, signatureB64Url, publicPem) {
  const sig = Buffer.from(signatureB64Url.replace(/-/g,'+').replace(/_/g,'/'), 'base64');
  return crypto.createVerify('RSA-SHA256').update(message).verify(publicPem, sig);
}

OpenSSL 验证示例

# msg 为 "<base64url(header)>.<base64url(payload)>"
echo -n "$msg" | openssl dgst -sha256 -verify public.pem -signature sig.bin

轮换与缓存

  • 使用 kid 标识版本,提供至少两个有效密钥的重叠窗口
  • 为 JWK 响应设置合理 Cache-Control 与最短轮询间隔

安全要点

  • 拒绝不支持的 alg,避免降级攻击
  • 校验 audissexp 与时钟偏移

总结

结合 JWK 与 kid 版本管理,可安全实施密钥轮换并保持稳定验证能力。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部