如何解码并检查 JWT 令牌

· 4 分钟阅读

JSON Web Token(JWT)是现代 Web 应用中管理认证最常见的方式。当认证出问题时 · 用户莫名其妙被登出、权限错误,或 API 返回 401 · 解码 JWT 通常是调试的第一步。

JWT 包含什么

JWT 有三部分,用点号分隔:

eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.dozjgNryP4J3jVmNHl0w5N_XgL0n3I9PlFUP0THsR8U

Header(头部)· 包含算法(HS256、RS256 等)和令牌类型。

{"alg": "HS256", "typ": "JWT"}

Payload(载荷)· 包含关于用户和令牌的 claims(声明)。

{"sub": "1234567890", "name": "Alice", "exp": 1700000000}

Signature(签名)· 确保令牌未被篡改的加密指纹。没有签名密钥无法读取。

常见的 JWT claims

Claim 全名 内容
sub Subject 用户 ID 或标识符
exp Expiration 令牌过期的 Unix 时间戳
iat Issued At 令牌创建时的 Unix 时间戳
iss Issuer 创建令牌的主体(您的认证服务器)
aud Audience 令牌的预期接收方
nbf Not Before 此时间之前令牌无效
jti JWT ID 唯一的令牌标识符

如何解码 JWT

  1. 粘贴您的令牌· 将完整的 JWT(header.payload.signature 格式)输入到解码器中。
  2. 查看解码的各段· 工具以格式化 JSON 显示 header(算法)、payload(claims)和 signature。
  3. 核对 claims· 检查过期日期、签发者、主题和任何自定义 claims。

用 JWT 调试

令牌已过期?检查 exp claim。将 Unix 时间戳转换为可读日期。如果在过去,说明令牌已过期,需要刷新。

权限错误?在 payload 中查找角色或作用域的 claims。实现各异,但常见如 "role": "admin""scope": "read write"

用户身份有问题?sub claim 标识用户。确认它匹配预期的 ID。

令牌被拒绝?检查 aud(audience)claim。如果 API 期望特定 audience 而令牌带有不同的 audience,它将被拒绝。

重要的安全注意事项

常见问题

可以用解码器验证 JWT 签名吗?

不能。签名验证需要签名密钥或公钥,它们存在您的服务器上。解码器显示令牌中的内容,但加密验证必须在您的后端进行。生产环境中绝不要信任未经验证的 JWT。

将 JWT 粘贴到在线工具安全吗?

当工具在浏览器中运行时是安全的。浏览器内的解码器本地处理令牌 · 不会向服务器发送任何内容。避免使用会用您的令牌发出网络请求的工具。

exp claim 是什么?

exp(expiration)claim 是一个 Unix 时间戳,指示令牌何时过期。超过此时间后,令牌应被拒绝。始终检查此 claim 来调试认证问题。

JWT 可以加密吗?

标准 JWT(JWS)是签名而非加密的 · 任何人都能解码 payload。JWE(JSON Web Encryption)令牌是加密的,但不太常见。绝不要将敏感数据(密码、机密)放入标准 JWT payload 中。