🔓 JWT解码器🔓 JWT Decoder
解析JWT Token,验证签名,检测过期状态Decode JWT tokens, verify signatures, check expiration
📋 Token 结构📋 Token Structure
🔐 签名验证 (HS256)🔐 Signature Verification (HS256)
什么是JWT解码工具?
JWT解码工具是一种解析JSON Web Token(JWT)内容的在线工具。JWT是一种紧凑的、URL安全的令牌格式,广泛用于Web应用的身份认证和信息传递。一个JWT由三部分组成:Header(头部)、Payload(载荷)和Signature(签名),三部分用点号分隔,每部分都是Base64URL编码的JSON。JWT解码工具可以解析令牌的各个部分,展示其中的声明(claims)信息,如用户ID、角色、过期时间等,帮助开发者调试认证流程和理解令牌内容。本工具同时验证签名是否有效,检查令牌是否过期。
如何使用JWT解码工具
- 粘贴JWT — 将完整的JWT字符串粘贴到输入框中(以"eyJ"开头的长字符串)。
- 自动解析 — 工具会分段解析Header、Payload和Signature,以格式化的JSON展示。
- 查看详细信息 — 检查令牌的签发时间、过期时间、发行者等声明,确认令牌状态。
常见使用场景
场景一:认证流程调试
前端登录后获取JWT,使用解码工具检查令牌中的用户信息和权限是否正确,排查认证问题。
场景二:API请求分析
查看API请求中Authorization头携带的JWT内容,确认令牌格式和声明是否符合预期。
场景三:安全审计
分析系统中使用的JWT配置,检查是否使用了安全的签名算法,令牌有效期设置是否合理。
技术原理
JWT由三部分组成,用"."分隔:
// JWT结构: Header.Payload.Signature
// 每部分都是Base64URL编码
// Header(头部)
// {
// "alg": "HS256", // 签名算法
// "typ": "JWT" // 令牌类型
// }
// Payload(载荷)- 存储声明(claims)
// {
// "sub": "1234567890", // 主题(用户ID)
// "name": "John Doe", // 用户名
// "iat": 1516239022, // 签发时间
// "exp": 1516325422 // 过期时间
// }
// Signature(签名)
// HMACSHA256(
// base64UrlEncode(header) + "." + base64UrlEncode(payload),
// secretKey
// )
// 解码(不需要密钥)
function decodeJWT(token) {
const parts = token.split('.');
const header = JSON.parse(atob(parts[0]));
const payload = JSON.parse(atob(parts[1]));
return { header, payload };
}
// 注意:解码≠验证,任何人都可以读取JWT内容
最佳实践与注意事项
- JWT的Header和Payload只是Base64编码,不是加密——任何拿到JWT的人都能解码查看内容。不要在Payload中存储敏感信息。
- JWT签名可以被验证但不能被伪造(前提是密钥安全)。如果签名无效,说明令牌被篡改。
- 设置合理的过期时间(exp),通常Access Token 15分钟到1小时,Refresh Token数天。
- 使用HS256时密钥长度至少256位(32字符),或使用RS256非对称签名更安全。
常见问题
Q:JWT解码后能看到密码吗?
A:JWT的Payload是Base64编码而非加密,任何人都可以解码查看。所以绝对不要在JWT中存储密码等敏感信息。JWT只应包含用户标识和权限等必要声明。
Q:解码和验证有什么区别?
A:解码只是读取JWT中的信息(不需要密钥)。验证是确认签名是否有效(需要密钥),确保令牌未被篡改。解码谁都能做,只有持有密钥的人才能验证签名。
Q:JWT的"exp"是什么意思?
A:exp是过期时间声明(Expiration Time),值是Unix时间戳(秒)。后端应检查当前时间是否超过exp值,过期则拒绝令牌。这是JWT安全使用的基本要求。
Q:HS256和RS256有什么区别?
A:HS256使用对称密钥(签发和验证用同一个密钥),简单但密钥分发有风险。RS256使用非对称密钥(私钥签发、公钥验证),更安全适合分布式系统,但性能略低。
Q:JWT可以注销吗?
A:JWT本身是无状态的,一旦签发无法主动撤销。实现注销需要额外机制:黑名单(存储已注销的JWT jti)或使用短有效期+Refresh Token方案。