JWT 安全边界与三种编码的区别
解码不等于认证。JWT 的 header.payload.signature 三段都只是 Base64URL 文本。本站用严格的 base64url 字母表解码,再尝试 JSON.parse;它没有密钥、不执行 HMAC/RSA 校验,也不检查签发者、受众或过期策略。因此报告固定写「解码不验证签名 / Decode only — signature is NOT verified」,并把 exp/iat 标为 unverifiedClaimTimes。
损坏段、非 JSON 段会进入 errors 数组,payload 以 __rawText / __notJson 原样展示;signatureVerification 始终为 NOT_PERFORMED,signatureVerified 始终为 false。要真正验签,请使用服务端可信库与密钥,本站不替代该步骤。
三种「百分号编码」不要混用:encodeURI 面向整条 URL,保留 : / ? & = # 等结构字符;encodeURIComponent 面向单个组件,连这些字符都转义;application/x-www-form-urlencoded(form)把空格写成 +,并把 UTF-8 字节逐个 %XX。解码时只有 form 模式把字面 + 换成空格,且 %2B 在替换之后才解成加号,因此不会被误当空格。
时间戳同理:秒与毫秒是同一时刻的两种计数,Z 后缀表示 UTC;1970-01-01T08:00:00+08:00 与 0 等价,未带时区的 ISO 串会被拒绝以避免隐式本地时区。