JWT 解码器/ 本地解码
即时解码 JWT Header 与 Payload,展示过期、签发等关键声明,Token 不上传服务器。
JWT Token
在上方粘贴 JWT Token 以解码。
Token 不会离开你的浏览器。
这个工具有帮到你吗?
什么是 JWT
JWT(JSON Web Token)是一种紧凑的、URL 安全的令牌格式,由三部分组成:Header(算法信息)、Payload(声明/数据)和 Signature(签名)。JWT 常用于身份认证和信息交换,服务端签发后客户端在每次请求中携带,服务端验证签名即可确认身份,无需查数据库。
JWT 的安全注意事项
永远不要在 JWT payload 中存放敏感信息(密码、信用卡号),因为 payload 只是 Base64 编码,任何人都能读取。签名只保证数据未被篡改,不保证保密性。使用 HTTPS 传输 JWT,设置合理的过期时间(建议 15 分钟到 1 小时),并实现刷新令牌机制。
代码示例
JavaScript (jsonwebtoken)
import jwt from 'jsonwebtoken';
// Sign
const token = jwt.sign(
{ sub: 'user_123', role: 'admin' },
process.env.JWT_SECRET,
{ expiresIn: '1h' }
);
// Verify
const payload = jwt.verify(
token, process.env.JWT_SECRET
);Python (PyJWT)
import jwt
# Sign
token = jwt.encode(
{"sub": "user_123", "exp": exp_ts},
secret,
algorithm="HS256"
)
# Verify
payload = jwt.decode(
token, secret,
algorithms=["HS256"]
)Go (golang-jwt)
import "github.com/golang-jwt/jwt/v5"
// Sign
token := jwt.NewWithClaims(
jwt.SigningMethodHS256,
jwt.MapClaims{"sub": "user_123"},
)
signed, _ := token.SignedString(secret)
// Verify
parsed, _ := jwt.Parse(signed,
func(t *jwt.Token) (any, error) {
return secret, nil
})Decode only (any language)
// JWT = base64url(header)
// + "."
// + base64url(payload)
// + "."
// + signature
function decodeJwt(token) {
const [h, p] = token.split('.');
const decode = s => JSON.parse(
atob(s.replace(/-/g,'+')
.replace(/_/g,'/'))
);
return { header: decode(h),
payload: decode(p) };
}常见问题
JWT 是什么?
JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在各方之间以 JSON 对象安全传输信息。它由三部分组成:Header(算法和 Token 类型)、Payload(声明数据)、Signature(签名),三部分用 . 分隔,各自经过 Base64URL 编码。
JWT 能被伪造吗?
Payload 本身只是 Base64URL 编码,任何人都可以解码查看其内容,但不能在不知道密钥的情况下伪造有效签名。因此,JWT 的安全性依赖于签名验证,敏感信息不应直接放在 Payload 中(除非使用 JWE 加密)。
exp、iat、nbf 这些字段是什么?
这些是 JWT 的标准声明:exp(Expiration Time)是 Token 的过期时间戳;iat(Issued At)是签发时间;nbf(Not Before)是生效时间,表示在此时间之前 Token 无效。时间戳均为 Unix 时间(秒)。
为什么无法在浏览器端验证签名?
签名验证需要密钥(HMAC 算法需要 secret,RSA/ECDSA 算法需要公钥)。在纯前端场景中通常没有密钥,因此只能解码查看内容,无法验证真实性。生产环境中签名验证应在服务端完成。
HS256 和 RS256 有什么区别?
HS256(HMAC-SHA256)使用同一个 secret 既签名又验证,适合单服务场景;RS256(RSA-SHA256)使用私钥签名、公钥验证,适合多服务/微服务场景,公钥可以公开分发,安全性更高。
我的 Token 安全吗?
本工具完全在浏览器本地运行,不发送任何网络请求,Token 不会离开你的设备。可以放心粘贴测试用 Token。生产环境的真实 Token 建议谨慎处理,避免泄露。