# JWT 解码器

URL: https://shahid09.is-a.dev/zh/tools/jwt-decoder/
Author: Muhammad Shahid (https://shahid09.is-a.dev/)
免费工具 · 在浏览器中运行

粘贴 JSON Web Token，读取其 header 和 payload，查看签发时间和过期时间。

**快速解答:** JWT 由点号分隔的三部分组成：header、payload 和签名。前两部分是 Base64URL 编码的 JSON，任何人都能解码阅读；只有签名能证明令牌是真实的。本工具解码 header 和 payload，并把 exp、iat 和 nbf 转换为可读日期，但不验证签名。

## 使用方法

1. **粘贴令牌.** 从应用、Authorization 请求头或 Cookie 中复制 JWT 并粘贴到框中。
2. **查看各部分.** header 显示算法；payload 显示声明，例如用户 ID 和角色。
3. **检查时间.** 工具会显示令牌的签发和过期时间，以及是否已经过期。

## 常见问题

### 把 JWT 粘贴到这里安全吗？

安全。解码完全在浏览器中进行，不会发送到服务器。不过，生产环境的令牌仍应像密码一样对待，避免分享。

### 这个工具会验证 JWT 签名吗？

不会。验证签名需要密钥或公钥，它们应保存在你的服务器上。解码只读取 header 和 payload。

### 为什么任何人都能读取 JWT 的 payload？

payload 只是编码，不是加密。绝不要在 JWT 中放密码或机密。

### exp、iat 和 nbf 是什么意思？

exp 是过期时间，iat 是签发时间，nbf 是生效时间（在此之前无效）。它们都是以秒为单位的 Unix 时间戳。

### 为什么使用 JWT 时用户会被随机登出？

通常是请求或标签页之间的刷新竞争、时钟差异、Cookie 设置，或服务器之间密钥不一致。

### JWS 和 JWE 有什么区别？

JWS 经过签名但可读，大多数 JWT 都是这种。JWE 是加密的，没有密钥无法读取 payload。本工具只解码签名令牌。

### JWT header 中的 alg 是什么？

签名算法，例如 HS256（共享密钥）或 RS256、ES256（私钥和公钥对）。服务器应只接受预期的算法。

### JWT 的有效期应该多长？

访问令牌通常较短，从几分钟到一小时，再配合有效期更长的刷新令牌获取新令牌。短有效期能在令牌泄露时减少损失。

### JWT 应该存放在浏览器的哪里？

很多应用把刷新令牌放在 httpOnly、Secure 的 Cookie 中，把短期访问令牌放在内存里，以限制恶意脚本能读取的内容。

### 可以修改 payload 后继续使用令牌吗？

不行。修改任何部分都会使签名失效，配置正确的服务器会拒绝该令牌。

## 相关内容

- [为什么用户会被随机登出，以及如何修复 JWT 会话问题](https://shahid09.is-a.dev/engineering/jwt-random-logouts-fix/)
- [Base64 编码解码工具](https://shahid09.is-a.dev/zh/tools/base64-encoder-decoder/)
- [Unix 时间戳转换器](https://shahid09.is-a.dev/zh/tools/unix-timestamp-converter/)
