JWT 解码器 / 编码器
即时解码分析JWT令牌,或生成签名JWT。完全在浏览器端处理。
所有处理均在您的浏览器中完成,数据不会发送到任何服务器。
什么是JWT(JSON Web Token)?
JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在各方之间以JSON对象的形式安全传输信息。它广泛用于Web应用程序的身份验证和信息交换。JWT是Base64URL编码的,并非加密,因此任何人都可以解码载荷。请勿在未加密的情况下将敏感信息存储在JWT中。
JWT结构
示例
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
HeaderPayloadSignature
Header
包含令牌类型(typ)和签名算法(alg,如HS256、RS256)。
Payload
包含声明(Claims)——用户信息及元数据,如过期时间(exp)、签发时间(iat)、主体(sub)等。
Signature
使用密钥对头部和载荷进行签名得到的值,用于验证令牌未被篡改。
标准声明
| Claim | 标准声明 |
|---|---|
| iss | 签发者 |
| sub | 主体(用户ID) |
| aud | 接收方 |
| exp | 过期时间 |
| iat | 签发时间 |
| nbf | 生效时间 |
| jti | JWT 唯一标识 |
常见问题
JWT是加密的吗?
不是。标准JWT(JWS)只是签名,并未加密。载荷是Base64URL编码的,任何人都可以解码。请勿将密码等敏感信息放入JWT载荷中。
为什么验证签名需要密钥?
基于HMAC的签名(如HS256)使用共享密钥。没有密钥就无法验证签名是否真实。解码载荷和验证签名是两个不同的操作。
没有exp声明会怎样?
如果没有exp声明,令牌本身不会过期。服务器需要实现自己的撤销机制(如令牌黑名单)来使这类令牌失效。
HS256和RS256有什么区别?
HS256使用所有方共享的对称密钥。RS256使用非对称密钥对(私钥签名,公钥验证),更适合微服务和第三方验证场景。
JWT应该存储在哪里?
推荐使用HttpOnly Cookie,可防御XSS攻击。将JWT存储在localStorage虽然方便,但容易受到XSS攻击。
什么是Refresh Token?
Refresh Token是一个独立的长期令牌,用于在Access Token过期后无需重新登录即可获取新的Access Token。
粘贴的JWT会被发送到服务器吗?
不会。所有解码和编码操作完全在浏览器中通过JavaScript完成,不会向任何服务器传输数据。