JWT 编码解码
粘贴令牌即可看头部与载荷,也能用自己的载荷签发一枚 —— 没有按钮,也不上传。
解码时可选(填了才验签),编码签发时必填。
签名:
令牌
头部
载荷
怎么用
- 粘贴令牌:头部与载荷立刻出现,不用点按钮。输入框始终保留你粘贴的原样,工具从不改写它。
- 在输入框下方的密钥框里填上密钥,即可校验签名。留空只是意味着「未验证」,声明照样照原样读出来。
- 切到「编码」,把声明写成 JSON,选 HS256/384/512 并填密钥,复制生成的令牌即可。切换模式不会清空已输入的内容。
- 标准的 exp / iat / nbf 会按你的语言与时区写成一句人话,并标出「已过期」「尚未生效」。
示例
令牌
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1LTg4NDgiLCJuYW1lIjoi5byg5LyfIiwicm9sZSI6InJldmlld2VyIiwiaXNzIjoiaHR0cHM6Ly9hcGkuZXhhbXBsZS5jbiIsImlhdCI6MTc2NzIyNTYwMCwiZXhwIjoxNzk4NzYxNjAwfQ.uWk-id8qypfOapVGLDN-1dPY01oAUSFxUnDWM48vrP0
头部与载荷
头部
{
"alg": "HS256",
"typ": "JWT"
}
载荷
{
"sub": "u-8848",
"name": "张伟",
"role": "reviewer",
"iss": "https://api.example.cn",
"iat": 1767225600,
"exp": 1798761600
}这枚令牌的密钥是「测试用密钥」:填进密钥框后状态行会变成「签名有效」。切到「编码」点「填入示例」会得到同样的载荷 —— 同样的密钥会逐字符还原上面这枚令牌。
口径、局限与已知问题
- 只支持 HS256 / HS384 / HS512 的签发与验签。RS*、ES*、PS* 令牌照常解码展示,但绝不验签 —— 那需要公钥,状态行会直接说明不支持,而不是猜一个结论。
- 无签名令牌(alg: none)会被解码并明确标注,但本工具**不签发**:编码时不填密钥会报错,而不是生成无签名令牌。
- 编码时头部由工具生成(`{"alg": …,"typ": "JWT"}`),不还原 kid / jku / x5c / cty 等头部字段 —— 这里签的是声明,不是证书链。
- 载荷 JSON 在签名前会被重新紧凑序列化,缩进与注释不会进令牌。键顺序遵循 JavaScript 对象语义:重复键只留最后一个,纯数字形状的键会被提前。
- 超大整数会丢精度 —— `12345678901234567890` 读回来是舍入过的,这是 JavaScript 数字的行为。工具不静默修正;在意位数时请用字符串。
- 面板里的 JSON 是为了人读而缩进的,签名覆盖的始终是令牌里那两段原文,中间不做任何重新编码:在这里验过的令牌,在你自己的代码里同样验得过。
- base64url 严格:`+` / `/` / `=` 一律报错而不是悄悄接受;解出的字节不是合法 UTF-8 会报错,而不是替换成乱码字符。粘贴时带入的空白会被忽略 —— 令牌里本来就不可能有空白。
- 加密的 JWE(五段式)不解密,但会告诉你粘进来的是 JWE。
- 上限 10,000 字符。不上传、不保存、不写进 URL、不提供带货分享;分享按钮只分享本页地址,不携带令牌与密钥。
相关工具
读完声明之后,通常下一步是这些。