用途
jwt-decode 用于解码和查看 JSON Web Token(JWT)的内容,不进行签名验证。当用户提供 JWT 字符串并希望查看其头部、载荷或声明时使用。
主要能力
- 将令牌按
.分割为三部分(头部、载荷、签名)。 - 对第 1、2 部分进行 base64url 解码并解析为 JSON。
- 展示头部、载荷(包含所有声明)以及原始签名字符串。
- 对于 exp、nbf、iat,同时显示 Unix 时间戳和人类可读的 UTC 时间;若 exp 已过期,标注已过期及过期时长。
- 执行安全检查(见下)。
输出格式
## Header
{ "alg": "RS256", "typ": "JWT", "kid": "abc123" }
Payload
{ "iss": "https://auth.example.com/", "sub": "user|12345", "exp": 1735689600 }
exp: 2025-01-01T00:00:00Z — EXPIRED (3 months ago)
iat: 2024-12-31T00:00:00Z
Signature
Algorithm: RS256 | Signature: [base64url string]
(Not verified — use jwt-validate to verify)
安全检查
发现以下情况时需显著标记:
alg: none— 令牌未签名。警告:“此令牌没有签名,不可信任。任何一方都可能创建或修改它。”这是已知攻击向量(CVE-2015-9235),攻击者剥离签名以绕过验证。- 载荷中的敏感数据 — JWT 是编码而非加密。若在声明中发现密码、密钥、API key 或 PII,需警告。
- 缺失
exp— 令牌永不过期。标记为安全风险。 - 头部中的
jku/jwk/x5u— 这些可用于诱骗验证方获取攻击者控制的密钥。若存在需标记。
使用方式
用户提供 JWT 字符串后,按上述步骤解码并展示结果,同时执行安全检查。
适用场景
- 需要快速查看 JWT 的头部、载荷或声明内容。
- 检查令牌中的时间声明是否过期。
- 初步排查令牌中的安全隐患(如 alg: none、敏感数据、缺失 exp、可疑头部字段)。
限制
- 该技能仅揭示令牌内容,不说明真实性。验证签名需使用 jwt-validate。
- 若
cty头部为 "JWT",载荷为嵌套 JWT,需递归解码。 - 解码失败时,报告具体错误(base64 格式错误、JSON 无效、段数错误)。