如何解析并理解JWT Token

开发者

学习JSON Web Token(JWT)包含的内容、如何解析它以读取负载,以及如何在不使用库的情况下验证其结构。

什么是 JWT?

JSON Web Token(JWT)是一种紧凑、URL 安全的身份凭证格式,由 RFC 7519 标准化,已成为现代 API 和单点登录(SSO)流程的默认选择。一个 JWT 是一串文字,内含一小段 JSON 数据和一份加密签名——任何收到它的人都能读到内容,但只有持有签名密钥的服务器才能生成有效的 JWT。这个特性让它非常适合"无状态"验证:服务器不必再维持 session,因为用户身份、权限、过期时间都写在 token 本身。

常见应用场景

  • API 身份验证

    用户登录一次后获得 JWT,之后每次请求都在 Authorization: Bearer 头部带上此 token。API 验证签名后即可信任其中的身份与权限,不必再查数据库。

  • 单点登录(SSO)

    OpenID Connect 建立在 JWT 之上:身份提供者签发 ID Token 描述用户,各下游应用通过公开的 JWKS 端点验证签名即可共享登录状态。

  • 短期一次性授权

    密码重置链接、邮箱验证链接、签名下载 URL 都很适合用 JWT。只要在 exp 字段设置过期时间,链接过期后自动失效。

步骤指南

1

了解JWT结构

JWT由三个以点分隔的Base64URL编码部分组成:标头.负载.签名。标头指定算法,负载包含声明(数据),签名用于验证完整性。

2

解析标头

取第一部分(第一个点之前),进行Base64URL解码。您将得到一个JSON对象,例如:{"alg":"HS256","typ":"JWT"}。这告诉您使用的签名算法。

3

解析负载

取第二部分进行Base64URL解码。您将看到声明,例如:sub(主题/用户ID)、exp(过期Unix时间戳)、iat(发行时间)、iss(发行者)和自定义声明。

4

检查过期时间

exp声明是Unix时间戳。与当前时间比较以查看token是否仍然有效。例如:exp: 1700000000 = 2023年11月14日 22:13 UTC。

5

使用JWT解析工具

将您的JWT粘贴到JWT解析工具中。它立即以格式化JSON显示解码后的标头、负载和签名部分——无需服务器,一切在您的浏览器中运行。

使用免费工具

JWT 解析工具

常见问题

Q: 在浏览器中解析JWT安全吗?

A: 安全——解码(读取负载)是安全的。JWT是Base64URL编码,不是加密的。切勿将您的JWT分享给不信任的第三方网站,因为token会授予访问权限。

Q: 没有密钥可以验证JWT签名吗?

A: 不行。签名验证需要密钥(用于HMAC)或公钥(用于RSA/ECDSA)。我们的解析器显示结构,但没有密钥就无法验证签名。

Q: 「JWT已过期」是什么意思?

A: 这表示exp时间戳已在过去。服务器会拒绝过期的token。您需要重新刷新或重新验证以获取新token。