---
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" }
]
}
验证流程
- 解析 JWT 头部,读取
alg=RS256与kid - 拉取 JWK,按
kid选择公钥 - 将
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,避免降级攻击 - 校验
aud、iss、exp与时钟偏移
总结
结合 JWK 与 kid 版本管理,可安全实施密钥轮换并保持稳定验证能力。

发表评论 取消回复