令牌工作室
Privacy First检查和生成 JWT/JWK/JWKS。
Header
Payload
Signature
什么是 JWT?
JSON Web Token(JWT)是一种紧凑、URL 安全的格式,用于在双方之间传递声明。JWT 由三部分组成,均采用 Base64URL 编码并以点号分隔:头部(算法和类型)、载荷(声明)和签名。签名确保令牌未被篡改。JWT 常用于 Web API 中的身份验证和信息交换。标准声明包括 sub(主题)、iss(签发者)、aud(受众)、exp(过期时间)、nbf(生效时间)、iat(签发时间)和 jti(JWT ID)。
JWT 算法
HS256/384/512 使用 HMAC 结合 SHA-2 和共享密钥——简单,但双方必须持有相同的密钥。RS256/384/512 使用 RSA PKCS#1 v1.5 非对称签名——非常适合微服务架构,因为各服务只需持有公钥即可。ES256/384/512 使用基于 NIST 曲线的 ECDSA,在相同安全强度下签名比 RSA 更小。PS256/384/512 使用 RSA-PSS,这是一种概率性变体,在现代系统中比 RS* 更受青睐。
JWK 与 JWKS
JSON Web Key(JWK)是表示密码学密钥的 JSON 结构。JWK 集(JWKS)是一种 JSON 结构,在 keys 属性下包含一个 JWK 数组。服务会在一个知名 URL(例如 /.well-known/jwks.json)上发布其 JWKS,使客户端无需带外密钥交换即可获取用于 JWT 验证的公钥。JWKS 中的密钥通过其 kid(密钥 ID)进行标识,JWT 头部会引用该 ID。
安全最佳实践
始终在服务器端验证 exp、nbf、iss 和 aud 声明。切勿在生产环境中使用 alg: none 算法——它会移除所有签名保护。当多个服务需要验证令牌时,优先使用非对称算法(RS*、ES*、PS*)而非 HMAC。定期轮换密钥,并使用 kid 标识每个令牌使用了哪个密钥进行签名。安全存储私钥——切勿将其提交到版本控制系统。使用较短的过期时间和刷新令牌,而不是长期有效的 JWT。