什么是 JWT
JWT(JSON Web Token)是一种紧凑的、URL 安全的令牌格式,用于在各方之间安全地传输信息。它由三部分组成:
eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0In0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
|________ Header ________| |________ Payload ________| |________ Signature ________|
三部分结构
| 部分 | 内容 | 说明 |
|------|------|------|
| Header | 算法和类型 | {"alg":"HS256","typ":"JWT"} |
| Payload | 载荷数据 | 用户信息、过期时间等 |
| Signature | 签名 | 验证令牌完整性 |
为什么需要 JWT
- 无状态认证:服务器无需存储会话信息
- 跨域支持:天然支持 CORS 和跨域请求
- 微服务间通信:服务间安全传递用户身份
- API 访问控制:保护 API 端点的安全
- 单点登录(SSO):多个系统共享认证状态
- 移动端认证:适合前后端分离架构
JWT vs Session
| 特性 | JWT | Session | |------|-----|---------| | 存储位置 | 客户端(Cookie/Header) | 服务器端 | | 扩展性 | ✅ 天然分布式 | ❌ 需要共享存储 | | 无状态 | ✅ 服务器无需存储 | ❌ 服务器维护状态 | | 注销困难 | ⚠️ 无法立即失效 | ✅ 服务器删除即可 | | 数据泄露 | ⚠️ Payload 仅 Base64 编码 | ✅ 数据在服务器端 |
如何使用在线工具
使用 DevToolkit Pro 的 JWT 解码器:
- 粘贴 JWT 令牌字符串
- 工具自动解码 Header 和 Payload
- 显示可读的 JSON 数据
- 显示过期时间等关键字段
- 支持 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 安全最佳实践
- 使用强密钥:HS256 至少 256 位
- 设置短过期时间:15 分钟到 24 小时
- 使用 Refresh Token:长生命周期的刷新机制
- 不要存储敏感信息:Payload 仅 Base64 编码,不是加密
- 使用 HTTPS:防止令牌在传输中被窃取
- 验证签名:始终验证 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 提供。更多开发者工具请访问 首页。
相关文章
CORS 预检请求(OPTIONS)到底是什么?前端开发者必知的跨域机制
CORS preflight预检请求是什么?为什么浏览器会发送OPTIONS请求?本文详解跨域预检触发条件、Access-Control-Allow-Origin等响应头含义、常见CORS报错的排查方法,以及如何在API测试中绕过CORS限制。
在线证书解码器:解析 SSL/TLS 证书信息
学习如何使用在线工具解码和查看 SSL/TLS 证书的详细信息。了解证书的结构、常见字段含义,以及如何验证证书的有效性。
HTTP API 测试完全指南:从基础到高级调试技巧
掌握 HTTP API 测试的核心技巧,包括 GET/POST/PUT/DELETE 请求、请求头配置、请求体格式、认证方式和调试方法。使用在线 API 测试工具提升开发效率。