学习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 字段设置过期时间,链接过期后自动失效。
步骤指南
了解JWT结构
JWT由三个以点分隔的Base64URL编码部分组成:标头.负载.签名。标头指定算法,负载包含声明(数据),签名用于验证完整性。
解析标头
取第一部分(第一个点之前),进行Base64URL解码。您将得到一个JSON对象,例如:{"alg":"HS256","typ":"JWT"}。这告诉您使用的签名算法。
解析负载
取第二部分进行Base64URL解码。您将看到声明,例如:sub(主题/用户ID)、exp(过期Unix时间戳)、iat(发行时间)、iss(发行者)和自定义声明。
检查过期时间
exp声明是Unix时间戳。与当前时间比较以查看token是否仍然有效。例如:exp: 1700000000 = 2023年11月14日 22:13 UTC。
使用JWT解析工具
将您的JWT粘贴到JWT解析工具中。它立即以格式化JSON显示解码后的标头、负载和签名部分——无需服务器,一切在您的浏览器中运行。
使用免费工具
JWT 解析工具
常见问题
Q: 在浏览器中解析JWT安全吗?
A: 安全——解码(读取负载)是安全的。JWT是Base64URL编码,不是加密的。切勿将您的JWT分享给不信任的第三方网站,因为token会授予访问权限。
Q: 没有密钥可以验证JWT签名吗?
A: 不行。签名验证需要密钥(用于HMAC)或公钥(用于RSA/ECDSA)。我们的解析器显示结构,但没有密钥就无法验证签名。
Q: 「JWT已过期」是什么意思?
A: 这表示exp时间戳已在过去。服务器会拒绝过期的token。您需要重新刷新或重新验证以获取新token。