# JWT 解码与验证器

解码 JSON Web Token,检查有效期和声明,并用密钥或公钥验证签名。

https://codeknife.dev/zh/jwt-jiema/

## 它能做什么

解码 JSON Web Token 来读取它的头部和载荷，查看它是否已过期，并用密钥或公钥验证它的签名。令牌在你的浏览器中解码，本页不显示广告，令牌和密钥绝不会被分享或保存。

## 如何使用

1. 粘贴令牌。开头的 `Bearer ` 前缀和换行符会被忽略。
2. 以格式化或紧凑的 JSON 阅读载荷。载荷下方是算法、状态，以及 `exp`、`nbf` 和 `iat` 的时间，旁边显示它们与现在相差多久。
3. 要验证签名，请输入密钥：HS256、HS384 和 HS512 使用密钥（secret），RS、PS、ES 和 EdDSA 使用公钥（PEM 或 JWK）。
4. 可以在 JSON 与声明之间切换头部和负载：声明视图会列出每个声明及其含义，并把时间类声明显示为日期。
5. 打开编码标签页，可以编写头部和负载，并用密钥或私钥（PKCS#8 PEM 或 JWK）签署。该标签页上的内容不会被保存、分享或加入历史记录。

## 示例

```
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
```

该令牌的载荷：

```json
{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}
```

它的签名可以用密钥 `your-256-bit-secret` 验证通过。

## 须知

- 解码不等于验证：载荷只是被编码，并没有加密，任何人都能读取。
- 你的服务器必须先验证签名，才能信任任何声明。
- 算法为 `none` 的令牌没有签名，所以任何人都可能伪造它。
- 请把真实令牌当作密码对待。在这里粘贴时，尽量使用已过期的或测试用的令牌。
- 粘贴的 JWKS 会按令牌的 `kid` 查找密钥，单个 JWK 则直接使用。本页面绝不会向令牌的签发者获取密钥集。
- 比其哈希更短的 HMAC 密钥（32、48 或 64 字节）容易被猜出，因此页面会提醒你。密钥可按 UTF-8 文本或 Base64URL 读取。

## 什么是 JWT?

JSON Web Token 由用点连接的三段 Base64URL 组成:说明签名算法的头部、包含声明(如令牌面向谁、何时过期)的载荷,以及签名。前两段任何人都能读取;只有签名能证明令牌来自持有密钥的人。

## 常见问题

### 解码令牌就等于验证吗?

不等于。解码只是读取未加密的内容。验证是用密钥检查签名,你的服务器在信任任何声明之前必须先做这一步。

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

exp 是令牌过期的时间,nbf 是在此之前无效的时间,iat 是签发时间,都是自 1970 年起的秒数。本工具会把它们与你设备的时钟比较。

### 在这里粘贴真实令牌安全吗?

令牌在你的浏览器中解码,绝不会发送到我们的服务器,本页也不显示广告。不过仍应像对待密码一样对待有效令牌:最好使用已过期或测试用的令牌。