JWT 解码工具

JWT 是 OAuth 与 API 鉴权最常见的凭证格式,由 Header、Payload、Signature 三段 Base64URL 组成。本工具在浏览器本地解码并高亮 exp、aud、iss 等声明,帮助快速定位过期、受众不匹配或环境混用问题。解码不等于验签——请配合 jwt-generator 做开发联调,生产环境务必在服务端校验签名。

阅读完整指南: JWT 安全入门:解码、验证与常见误区 →

隐私提示:本地解析,不上传服务器。

↓ 在下方输入区粘贴内容,结果会立即显示

在此粘贴 JWT Token

支持完整 Token 或带 Bearer 前缀的字符串,粘贴后自动解析。

JWT 是 OAuth 与 API 鉴权最常见的凭证格式,由 Header、Payload、Signature 三段 Base64URL 组成。本工具在浏览器本地解码并高亮 exp、aud、iss 等声明,帮助快速定位过期、受众不匹配或环境混用问题。解码不等于验签——请配合 jwt-generator 做开发联调,生产环境务必在服务端校验签名。

快速开始

  1. 粘贴 Token

    支持带 Bearer 前缀; 系统会自动去掉。

  2. 查看 Header 与 Payload

    重点关注 alg、sub、aud、exp 等字段。

  3. 核对过期与签名

    工具会提示即将过期、已过期、或签名缺失。

JWT 三段结构

标准 JWT 由 Header.Payload.Signature 组成,用点号分隔。Header 通常含 alg(算法)与 typ;Payload 是 JSON 声明集,常见 sub(用户 ID)、exp(过期 Unix 时间戳)、iat、aud、iss;Signature 用于验证前两段未被篡改。

本工具对 Header 与 Payload 做 Base64URL 解码展示,并解析 exp 给出过期/即将过期提示。若 Signature 段缺失或明显截断,工具会标注异常——这在复制 Token 时很常见。

如何定位登录问题

第一步看 exp:若小于当前时间,后端应返回 401,前端需走刷新 Token 或重新登录。第二步核对 aud 与 iss 是否匹配当前服务配置——多环境(staging/production)混用 Token 时极易出错。第三步检查自定义声明(如 role、scope)是否包含预期权限。

配合 **json-formatter** 格式化从 API 返回的错误 JSON,用 **base64-encoder-decoder** 理解个别 claim 的编码。若需签发测试 Token,可用 **jwt-generator**(仅开发环境,勿用生产密钥)。

安全误区

「能解码」≠「可信任」。攻击者可伪造 Payload 并配上任意 Signature;只有持有密钥的服务端验签才能确认真实性。不要把 JWT 当作加密:Payload 只是 Base64URL 编码,任何拿到字符串的人都能阅读。

请勿在工单、截图或公开仓库粘贴生产 Token。若必须分享样本,替换 sub、email 为假数据,并缩短 exp。处理完成后清空输入框。

exp、nbf 与时间窗口

exp(Expiration Time)声明 token 在此 Unix 时间戳之后必须被拒绝;nbf(Not Before)则定义生效起点。许多 401 并非签名错误,而是 exp 已过期或 nbf 尚未到达——解码器会按当前本地时间给出「已过期」「即将过期」提示。若客户端与服务端时钟偏差超过后端允许的 leeway(常见 0–300 秒),合法用户也会间歇性失败。排查时对比 exp 与服务器 UTC 时间,并确认 refresh token 流程是否在 access token 过期前触发。

iat(Issued At)帮助判断 token 是否被异常重放或缓存过久。某些系统还会在 payload 中加入 auth_time 或自定义 TTL 字段。调试 refresh 逻辑时,记录连续两次解码的 exp 差值是否等于配置的 access token 寿命。配合 jwt-generator 签发不同 exp 的样本,可在 staging 环境复现边界条件而无需等待真实过期。

aud、iss 与多租户配置

aud(Audience)列出 token 的预期接收方——API 网关、资源服务器或特定 client_id。若前端从 staging IdP 拿到 token 却调用 production API,aud 不匹配会导致「payload 看起来正常但验签通过仍 403」。iss(Issuer)标识签发者 URL 或租户 ID,必须与 OIDC discovery 文档中的 issuer 完全一致(包括末尾斜杠)。多租户 SaaS 常在 payload 中加入 tenant_id 或 org_slug,解码后逐项与路由上下文比对。

scope 与自定义 role/permissions 声明决定授权范围,但解码器只展示内容、不评估策略。若 RBAC 异常,先确认 scope 字符串是否为空或被截断(某些 IdP 对 consent 有限制)。错误响应体可用 json-formatter 格式化;若 claim 值本身经 Base64 嵌套,再用 base64-encoder-decoder 展开。

alg 选择与验签分工

Header 中的 alg 声明签名算法:HS256 使用对称密钥,RS256/ES256 使用公钥验签。历史上曾出现 alg:none 攻击——生产服务必须白名单允许的算法并拒绝 downgrade。本工具展示 alg 供人工审查,但不执行密码学验签;「能读 payload」绝不代表 token 可信。对称密钥场景下,jwt-generator 可用于本地生成测试 token,密钥仅用于开发环境。

RS256 公钥通常来自 JWKS 端点;kid(Key ID)指示应使用哪把密钥。密钥轮换期间旧 token 可能携带过期 kid,导致验签失败。运维应监控 JWKS 缓存 TTL 与轮换窗口。若仅需确认 payload 结构是否正确,本地解码足够;上线前必须在 API 网关或应用层调用标准 JWT 库完成完整验签。

安全处理与样本脱敏

JWT payload 仅 Base64URL 编码,任何获得完整字符串的人都能解码查看 email、sub 或内部 ID。请勿在 Slack、工单截图或公开 gist 粘贴生产 token。分享调试样本时,替换 sub/email 为虚构值、缩短 exp 至几分钟内,并移除 Authorization 头中的 Bearer 前缀后再粘贴。处理完毕清空输入框;本工具不上传 token,但剪贴板与屏幕共享仍会泄露。

若怀疑 token 泄露,应立即在 IdP 撤销 refresh token、轮换签名密钥并缩短 access token TTL。日志中记录 jti(JWT ID)可实现单 token 吊销。配合 pii-scanner 扫描待外发的日志文本,避免二次泄露;hash-generator 可用于对比 webhook 签名原文,但与 JWT 验签是不同流程。

跨环境时钟与 aud/iss 核对

预发与生产若时钟差几分钟,会导致「本地未过期、网关判 exp」。解码后记下 exp/nbf 的绝对时间,与服务器 NTP 状态对照。同时确认 aud/iss 是否仍指向旧环境域名——复制生产 token 到预发是常见事故。

只在本地解码排障;不要把生产 token 贴进群聊。确认问题后轮换并作废相关会话。

示例

示例 Token

Input

eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjMiLCJleHAiOjQ3MDI0NDQ4MDB9.signature

粘贴后可看到 sub=123 与 exp 时间。

FAQ

会上传我的 Token 吗?

不会。解析完全在浏览器本地完成,不上传 Towalles 服务器。

为什么提示过期?

因为 exp 声明的时间早于当前时间。检查签发方时区、时钟偏差与 Token 有效期策略。

支持 Bearer 前缀吗?

支持;粘贴 Authorization: Bearer eyJ... 或纯 Token 均可,工具会自动清理前缀。

解码等于验证签名吗?

不等于。本工具不做 HMAC/RSA 验签;生产环境必须由 API 服务端使用密钥验证。

RS256 和 HS256 有什么区别?

HS256 用对称密钥,泄露风险高,适合内部短期场景;RS256 用公私钥对,公钥可分发,更适合多服务验证。生产 OAuth 通常推荐 RS256。

解码成功是否说明 token 合法?

否。解码只说明 Base64URL 格式正确且 JSON 可解析;攻击者可伪造 payload 并附上任意签名段。只有持有密钥或公钥的服务端验签才能确认真实性。请在本工具查看声明后,仍依赖 API 层的标准 JWT 库完成验签与 aud/iss 校验。

为什么 exp 未过期仍收到 401?

常见原因包括:aud 或 iss 不匹配、nbf 在未来、服务端时钟与 exp 基准不一致、token 在黑名单中,或网关使用了不同的签名密钥。用本工具核对 aud/iss/nbf,并与 IdP 配置及 API 日志中的拒绝原因交叉验证。

Bearer 前缀需要手动删除吗?

不需要。粘贴 Authorization 头整行(如 Bearer eyJ...)时,工具会自动识别并去掉 Bearer 前缀与多余空白。若仍失败,检查 token 是否被换行截断或缺少 Signature 段。

HS256 与 RS256 token 解码有区别吗?

解码阶段无区别——Header 与 Payload 都是 Base64URL,与签名算法无关。区别在于验签:HS256 需要对称密钥,RS256 需要 JWKS 公钥。本工具展示 alg 字段提醒你后续应使用的验签方式,但不执行验签本身。

只有两段的 token 是什么?

可能是 JWE 或其他格式,或被截断。不要当标准 JWS 三段式强行解;先向签发方确认。