Skip to content
api2026-07-252 分钟阅读

什么是 JWT

JWT(JSON Web Token)是一种紧凑的、URL 安全的令牌格式,用于在各方之间安全地传输信息。它由三部分组成:

eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0In0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
|________ Header ________| |________ Payload ________| |________ Signature ________|

三部分结构

| 部分 | 内容 | 说明 | |------|------|------| | Header | 算法和类型 | {"alg":"HS256","typ":"JWT"} | | Payload | 载荷数据 | 用户信息、过期时间等 | | Signature | 签名 | 验证令牌完整性 |

为什么需要 JWT

  1. 无状态认证:服务器无需存储会话信息
  2. 跨域支持:天然支持 CORS 和跨域请求
  3. 微服务间通信:服务间安全传递用户身份
  4. API 访问控制:保护 API 端点的安全
  5. 单点登录(SSO):多个系统共享认证状态
  6. 移动端认证:适合前后端分离架构

JWT vs Session

| 特性 | JWT | Session | |------|-----|---------| | 存储位置 | 客户端(Cookie/Header) | 服务器端 | | 扩展性 | ✅ 天然分布式 | ❌ 需要共享存储 | | 无状态 | ✅ 服务器无需存储 | ❌ 服务器维护状态 | | 注销困难 | ⚠️ 无法立即失效 | ✅ 服务器删除即可 | | 数据泄露 | ⚠️ Payload 仅 Base64 编码 | ✅ 数据在服务器端 |

如何使用在线工具

使用 DevToolkit Pro 的 JWT 解码器

  1. 粘贴 JWT 令牌字符串
  2. 工具自动解码 Header 和 Payload
  3. 显示可读的 JSON 数据
  4. 显示过期时间等关键字段
  5. 支持 HS256/RS256 等算法标识

代码中的 JWT 使用

Node.js(生成和验证)

const jwt = require('jsonwebtoken');

// 生成 JWT
const token = jwt.sign(
  { sub: '12345', name: '张三', role: 'admin' },
  'your-secret-key',
  { expiresIn: '24h' }
);

// 验证 JWT
const decoded = jwt.verify(token, 'your-secret-key');
console.log(decoded); // { sub: '12345', name: '张三', ... }

Python

import jwt
from datetime import datetime, timedelta

# 生成 JWT
payload = {
    'sub': '12345',
    'name': '张三',
    'exp': datetime.utcnow() + timedelta(hours=24)
}
token = jwt.encode(payload, 'your-secret-key', algorithm='HS256')

# 验证 JWT
decoded = jwt.decode(token, 'your-secret-key', algorithms=['HS256'])
print(decoded)

JWT 安全最佳实践

  1. 使用强密钥:HS256 至少 256 位
  2. 设置短过期时间:15 分钟到 24 小时
  3. 使用 Refresh Token:长生命周期的刷新机制
  4. 不要存储敏感信息:Payload 仅 Base64 编码,不是加密
  5. 使用 HTTPS:防止令牌在传输中被窃取
  6. 验证签名:始终验证 JWT 签名的有效性

FAQ

JWT 的 Payload 是加密的吗?

不是。JWT Payload 仅经过 Base64URL 编码,任何人都可以解码查看内容。不要在 JWT 中存储密码、信用卡号等敏感信息。如果需要加密,使用 JWE(JSON Web Encryption)。

JWT 过期后怎么办?

使用 Refresh Token 机制。Access Token 过期后,用 Refresh Token 获取新的 Access Token,避免用户重新登录。

如何让 JWT 立即失效?

标准 JWT 无法立即失效(无状态设计)。解决方案:维护黑名单(将已注销的 JWT 加入黑名单),或者使用短过期时间减少风险窗口。


本文由 DevToolkit Pro 提供。更多开发者工具请访问 首页


ad