JWT 解码器
纯前端 · 只解码不验签:粘贴 JWT,立即拆开三段并格式化。数据不出浏览器,不联网、不记录,也不会帮你验签。
怎么用
把一段 JWT(形如 xxxxx.yyyyy.zzzzz,用两个点号分三段)粘进下面,点 解码,工具会展示 header、payload 的格式化 JSON,并把 exp / iat / nbf 这类时间字段转成可读日期。
JWT 到底是什么
JSON Web Token 是一种把「声明(claims)」用 JSON 承载、再加签名的令牌格式,广泛用于登录态、API 鉴权、单点登录。它长这样:
三段用点号连接:
- header:元数据,通常是
{ "alg": "HS256", "typ": "JWT" },说明签名算法和类型。 - payload:真正的业务声明,比如用户 ID、角色、过期时间。
- signature:用密钥对「header.payload」算出的签名,用来保证前两段没被篡改。
关键点:前两段只是 base64url 编码,不是加密。任何人拿到令牌都能解码读内容,只有签名这一步才需要密钥。
常见字段速查
| 字段 | 含义 | 说明 |
|---|---|---|
iss |
签发者 | 谁发的这个令牌 |
sub |
主体 | 令牌代表的是谁(用户 ID) |
aud |
受众 | 令牌发给哪个服务用 |
exp |
过期时间 | Unix 秒,过了就失效 |
iat |
签发时间 | Unix 秒,什么时候发的 |
nbf |
生效时间 | Unix 秒,在此之前不可用 |
jti |
唯一 ID | 用于防重放 |
这些字段都是「约定俗成」的标准注册声明,具体业务还会往 payload 里塞自定义字段(如 role、tenant)。解码后对照这张表,令牌在说什么一目了然。
解码 ≠ 验签,这条必须记住
这是 JWT 最容易误用的地方,单独强调:
- 解码是公开的:base64url 解码不消耗任何密钥,等于把内容摊开给你看,目的是排查和阅读。
- 验签才是信任:签名验证需要密钥,确认「内容没被改、确实是签发者发的」。这一步只能在持有密钥的服务端做。
- 所以:本工具解码出来的 payload 哪怕看起来完全正常,也不能当信任依据。攻击者改了 payload 再重新 base64url 编码,解码出来照样「合法」。信任永远建立在服务端验签之上。
几个真实的安全坑位
alg=none 攻击:部分库允许把 alg 设为 none,相当于去掉签名。攻击者可把 alg 改成 none、删掉签名、随意改 payload,一些配置不当的服务端会照单全收。健壮实现必须显式拒绝 none,并固定预期算法,不信任令牌自带的 alg 字段。
算法混淆(RS256 ↔ HS256):RS256 用非对称密钥(公钥验签),HS256 用对称密钥(同一密钥签名验签)。如果服务端预期 RS256 却允许 HS256,攻击者可拿公钥当 HMAC 密钥去伪造签名。服务端要锁定算法,别让令牌自述算法。
exp 是 Unix 秒,不是毫秒:不少人把毫秒时间戳填进 exp,导致令牌立刻过期或永不过期。解码时如果发现过期时间离谱(比如 1970 年或几百年后),先怀疑单位搞错。
敏感信息别塞 payload:因为 payload 只是编码不加密,令牌里放用户邮箱、权限细节没问题(接收方本就该能看到),但绝不要放密码、密钥、身份证号这类机密——任何拿到令牌的人都能读。
什么时候用这个工具
- 联调接口时,快速看清楚后端发的令牌里到底有哪些声明、什么时候过期;
- 排查「为什么登录后还是 401」:先解出来看
exp是不是早过了、aud对不对; - 在日志里定位某次请求携带的
sub/jti,做审计回溯。
它帮你「看懂」令牌,但请始终把「是否可信」的判断留给服务端验签。
一个解码示例
拿一个真实形态的令牌举例(已截断签名,仅示意结构):
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyLTEyMyIsInJvbGUiOiJhZG1pbiIsImV4cCI6MTcwMDAwMDAwMH0.SflKx...
解码后:
- Header:
{ "alg": "HS256", "typ": "JWT" }—— 用的是对称签名。 - Payload:
{ "sub": "user-123", "role": "admin", "exp": 1700000000 }——exp换算成可读时间后,你能立刻判断这条令牌是否已过期。 - Signature:一段看不懂的签名串,本工具不解析也不验证。
这种「先解出来看 exp 和 role」的动作,就是你日常定位鉴权问题最高频的用法。
JWT 在运维架构里的位置
- API 网关:网关校验 JWT 签名,决定是否放行、把
sub/role注入下游请求头。解码工具帮你确认网关到底看到了什么声明。 - 微服务间调用:服务 A 调服务 B,常把 JWT 透传,B 自己验签取声明,省去每次查中心会话库。
- 单点登录(SSO):一次登录拿到 JWT,多个系统共用,减少重复登录。
- 移动端 / SPA:前端把令牌存本地(注意存哪、防 XSS),每次请求带上。
JWT 和 Session Cookie、不透明令牌的区别
| 方案 | 状态 | 优点 | 缺点 |
|---|---|---|---|
| Session Cookie | 服务端有状态 | 可随时吊销、改了立刻生效 | 要共享会话存储,扩展开销大 |
| 不透明令牌 | 服务端查库 | 可控、可吊销 | 每次都要查,延迟高 |
| JWT | 无状态 | 自包含、不用查库、易扩展 | 难即时吊销、payload 不加密 |
选哪个看场景:要强吊销(如风控紧急踢人)就别用纯 JWT;要水平扩展、跨服务自包含声明,JWT 很合适。很多系统折中:JWT 配短过期 + 刷新令牌。
服务端怎么验签(本工具不做的事)
解码只把内容摊开,验签才是信任的闭环。以 HS256 为例,服务端拿密钥对 header.payload 做 HMAC-SHA256,把结果和令牌里的 signature 比对,一致才信。RS256 则用私钥签名、公钥验签。这一步必须在服务端、且用服务端持有的密钥完成——正因为需要密钥,浏览器里的纯前端工具永远做不到,所以它只会解码。
顺带提醒:验签时务必固定算法(见上文 alg=none / 算法混淆坑),不要信任令牌自带的 alg 字段。
刷新令牌怎么配合
JWT 一般设较短的 exp(几分钟到几小时),降低泄露后被滥用的窗口。过期后用刷新令牌换新的访问令牌。刷新令牌通常另存、可吊销、生命周期更长。排查「频繁掉登录」时,先解访问令牌看 exp 是不是太短、刷新链路有没有断;本工具看的始终是访问令牌本身。
相关教程
- AI 安全与防护 — 鉴权令牌、密钥管理与常见攻击面
- DevSecOps 安全基线 — 令牌生命周期、最小权限与防泄露
- LLM 服务可观测 — 接口鉴权链路的排查思路