调试 OAuth2 / SSO / API 鉴权时常用的三件事,都在浏览器本地完成:
header.payload.signature 三段拆开,展示 Header、Payload 的 JSON,以及每段的 Base64URL 原文(自动补齐 URL 安全字符和 padding)。alg。时间声明(exp / nbf / iat)会换算成本地时间并给出「还有多久过期 / 多久前签发」。
exp / nbf / iat 的本地时间和状态,以及 iss / sub / aud 等标准字段和自定义字段。iat / exp。| 字段 | 全称 | 含义 |
|---|---|---|
iss |
Issuer | 签发者,通常是认证服务器地址 |
sub |
Subject | 主体,一般是用户 ID |
aud |
Audience | 接收方,Token 面向的服务 |
exp |
Expiration Time | 过期时间(Unix 秒),过期后应拒绝 |
nbf |
Not Before | 生效时间,在此之前无效 |
iat |
Issued At | 签发时间 |
jti |
JWT ID | 令牌唯一标识,用于防重放 |
Q:验签需要私钥吗? A:不需要。HMAC(HS*)用的是签发和验证共用的同一个 Secret;RSA / ECDSA(RS/ES/PS*)验签只需要公钥,私钥永远不要贴到任何在线工具。
Q:alg: none 是什么?
A:表示 Token 未签名。工具会解码它但会红字标注 —— 生产系统必须拒绝 none,否则任何人都能伪造。
Q:为什么显示"签名不匹配"?
A:常见原因:Secret / 公钥不对;Header 里的 alg 与你选的密钥格式不一致;Token 被截断或多了空格;HS* 的 Secret 实际是 Base64 编码的(改选「Secret Base64」)。
Q:时间为什么和我预期差几小时?
A:exp / iat 是 UTC 的 Unix 时间戳,工具按你本机时区换算显示。服务端判断过期用的是 UTC 秒数,不受时区影响。
Q:数据会上传吗? A:不会。解码、验签、签发全部用浏览器的 Web Crypto 在本地完成,Token 和密钥不发送到任何服务器。
Base64 编解码 · Base64 与文件互转 · 时间戳转换 · HMAC 计算 · 文字加解密