解析 JWT Token,查看 Header 和 Payload 内容
JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在网络应用之间安全地传输信息。它以紧凑的、自包含的 JSON 对象形式传递声明(Claims),广泛用于身份认证和信息交换场景。JWT 使用 Base64url 编码和数字签名(或加密)确保数据完整性和来源可信。
一个标准的 JWT 由三部分组成,用点号(.)分隔:
Header.Payload.Signature
Header 通常包含两部分信息:令牌类型(typ,通常为 JWT)和签名算法(alg,如 HS256、RS256、ES256 等)。还有一些可选字段如 kid(密钥 ID)、cty(内容类型)等。
Payload 包含声明(Claims),即关于实体(通常是用户)和其他数据的声明。声明分为三种类型:
iss(签发者)、sub(主题)、aud(接收方)、exp(过期时间)、nbf(生效时间)、iat(签发时间)、jti(JWT 唯一标识)。Signature 用于验证消息在传输过程中未被篡改。计算方式为:使用 Header 中指定的算法,对 Base64url 编码后的 Header 和 Payload 以及一个密钥进行签名。格式为:HMACSHA256(base64UrlEncode(header) + '.' + base64UrlEncode(payload), secret)
JWT 的典型工作流程如下:
Authorization: Bearer <token> 头中携带。| 声明 | 全称 | 说明 |
|---|---|---|
iss | Issuer | JWT 的签发者 |
sub | Subject | JWT 所面向的主体(通常是用户 ID) |
aud | Audience | JWT 的预期接收方 |
exp | Expiration Time | JWT 的过期时间(Unix 时间戳),过期后不可接受 |
nbf | Not Before | JWT 的生效时间,在此之前不可接受 |
iat | Issued At | JWT 的签发时间(Unix 时间戳) |
jti | JWT ID | JWT 的唯一标识符,用于防止重放攻击 |
alg | Algorithm | 签名/加密算法(位于 Header 中) |
typ | Type | 令牌类型(位于 Header 中,通常为 JWT) |
| 算法 | 类型 | 说明 |
|---|---|---|
HS256 | HMAC with SHA-256 | 对称签名,使用同一个密钥签名和验证 |
HS384 | HMAC with SHA-384 | HS256 的更安全版本 |
HS512 | HMAC with SHA-512 | HS256 的最安全版本 |
RS256 | RSA with SHA-256 | 非对称签名,使用私钥签名、公钥验证 |
RS384 / RS512 | RSA variants | RS256 的更安全版本 |
ES256 | ECDSA with P-256 and SHA-256 | 椭圆曲线非对称签名,比 RSA 更短更快 |
ES384 / ES512 | ECDSA variants | ES256 的更安全版本 |
PS256 | RSA-PSS with SHA-256 | RSA-PSS 填充方案 |
none | 无签名 | 不安全的无签名模式,生产环境切勿使用 |
exp 声明至关重要。通常 Access Token 设置为 15 分钟至数小时,Refresh Token 可设置数天。