# JWT 解码器

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

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

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

## 使用方法

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

## 示例

一个 admin 角色用户的已签名 JWT，有效期 1 小时：

输入:

```
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyXzQyIiwibmFtZSI6IlNhcmEgTGV2aSIsInJvbGUiOiJhZG1pbiIsImlhdCI6MTc5MzUyMDAwMCwiZXhwIjoxNzkzNTIzNjAwfQ.1R3nQ-xp3SDmEZSSr355txmajhu1r1JjO863Li_Cam0
```

输出:

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

Payload
{
  "sub": "user_42",
  "name": "Sara Levi",
  "role": "admin",
  "iat": 1793520000,
  "exp": 1793523600
}

Issued (iat):  2026-11-01T08:00:00Z
Expires (exp): 2026-11-01T09:00:00Z
```

## 常见错误及解决方法

- **令牌无法解码**: 只复制令牌本身。去掉 "Bearer " 前缀、引号和换行，并确认里面正好有两个点。
- **jwt expired (TokenExpiredError)**: exp 时间已过。用 refresh token 获取新的 access token，不要简单地延长令牌有效期。
- **invalid signature**: 签发令牌用的密钥和服务器验证用的不同，常见原因是不同环境或服务器的密钥不一致。所有验证令牌的地方都要使用同一个密钥。
- **jwt not active (NotBeforeError)**: nbf 时间还没到，通常是服务器时钟不同步。用 NTP 同步时钟，或允许几秒的时钟误差。

## 常见问题

### 把 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://byshahid.com/engineering/jwt-random-logouts-fix/)
- [Base64 编码解码工具](https://byshahid.com/zh/tools/base64-encoder-decoder/)
- [Unix 时间戳转换器](https://byshahid.com/zh/tools/unix-timestamp-converter/)

## 来源

- [RFC 7519: JSON Web Token](https://www.rfc-editor.org/info/rfc7519)
