JWT解码

⚡ 本地运行🔒 不上传数据🆓 免登录免费

JWT 是 JSON Web Token 的缩写,由 Header、Payload、Signature 三段组成,中间用英文点号隔开。Header 声明签名算法(如 HS256)与令牌类型;Payload 是一组 Claim(声明),比如用户标识 sub、过期时间 exp、签发时间 iat;Signature 是对前两段用密钥做的签名,用来防篡改。三段都经过 Base64Url 编码——它是 Base64 的 URL 安全变体,把 +/ 换成 -_ 并去掉末尾的 =,所以 Token 可以直接放在 URL 参数里传输。注意:解码只是把编码还原,任何人拿到 Token 都能读出 Payload,它只是编码、不是加密。

典型用法有三类。第一,联调登录接口时,把后端返回的 access_token 粘进来,一眼确认 sub 是不是当前用户、exp 还剩多久过期,不用再写 console.log 逐段解析。第二,线上用户报“突然被登出”,把他请求头里的 Token 贴进来查 exp,能立刻定位是令牌过期还是签名出了问题。第三,接入第三方 OAuth 或 SSO 时,核对 id_token 里的 iss(签发方)、aud(受众)是否符合预期,避免把测试环境的 Token 发到生产环境。

常见坑有四个。exp 是秒级时间戳(10 位数字),有些系统误用毫秒(13 位),本工具按秒解析,13 位数字会显示为几万年后的未来时间,遇到时先确认位数。alg 为 none 的 Token 没有签名,任何人都可以伪造,生产环境必须拒绝。Token 过期后服务端一律返回 401,前端应该引导用户重新登录,而不是反复重试同一个请求。粘贴时多带了空格或换行会导致“不是合法的 base64url 字符串”报错,先去掉首尾空白再试。

特别提醒:JWT 的 Payload 只是编码不是加密,切勿把密码、身份证号等敏感信息放进 Token。签名校验需要密钥,本工具的校验全程在浏览器本地用 WebCrypto 完成,密钥与 Token 不会发送到任何服务器(页面本身也没有后端接口)。但请注意:把 Token 贴进任何在线工具前,先确认它是测试 Token;生产环境的 Token 一旦外泄,最稳妥的做法是立即作废并轮换。

使用方法

  1. 在输入框粘贴完整的 JWT(header.payload.signature 三段式,可点“填入示例”体验)
  2. 页面自动拆解 Header、Payload 与签名,exp/iat/nbf 显示为北京时间与有效期状态
  3. 如需验签,在密钥框输入 HS256 密钥后点“校验签名”(示例 Token 的密钥是 demo-secret)
  4. 点“复制载荷”可导出格式化后的 Payload JSON

常见问题

JWT 的三段分别是什么?

Header(头部)声明签名算法 alg 与令牌类型 typ;Payload(载荷)是 Claim 集合,如 sub(用户标识)、exp(过期时间)、iat(签发时间);Signature(签名)是对前两段用密钥做的签名,用于防篡改。本工具自动拆出三段并格式化展示。

exp、iat、nbf 显示的时间怎么看?

它们都是秒级 Unix 时间戳。本工具自动换算成北京时间,并对 exp 给出状态:已过期标红,仍有效的显示剩余天/小时/分钟;nbf(生效时间)在未来时会提示未生效。注意有些系统用毫秒时间戳(13 位),贴进来若显示为几万年后,就是位数问题。

提示 Token 过期或签名无效怎么办?

Token 过期说明 exp 已过当前时间,这是正常的安全机制:重新登录获取新 Token 即可,不要试图改大 exp——签名会对不上的。签名无效有三种可能:密钥填错、Token 被截断或篡改、算法不匹配(如 RS256 的 Token 用 HS256 密钥验)。排查顺序:先确认 Token 是完整三段,再核对密钥与算法。

为什么提示不是合法的 base64url 字符串?

JWT 的每段必须是 Base64Url 字符(A–Z、a–z、0–9、-、_)。常见原因:复制时多带了空格换行、Token 被截断只剩两段、或者贴的是普通 Base64(含 +/)而非 URL 安全版本。先去掉首尾空白,确认是完整的三段式再解析。

我的 Token 和密钥会被上传吗?

不会。解码是纯字符串运算,签名校验用的是浏览器内置 WebCrypto,全部在本地完成;本页面没有任何后端接口,不会发起网络请求。但仍建议只用测试 Token 做在线解析,生产环境的 Token 一旦粘贴到任何第三方页面,最稳妥的做法是立即作废并重新签发。