JWT编码

在浏览器本地把 JWT 的头部与载荷编码成令牌,也能反向解码查看声明并校验签名,数据不上传。

编码(生成令牌)

解码(解析令牌)

使用方法

JWT编码分编码与解码两段,都只在你本地运行:

  1. 在「头部 Header」填 JSON,示例为 {"alg":"HS256","typ":"JWT"};在「载荷 Payload」填 JSON,示例含 sub、name、iat 三个字段。
  2. 选算法并填签名密钥;点「生成令牌」,或在头部/载荷框按 Ctrl / Cmd + Enter 即可生成。
  3. 把得到的令牌粘到「待解析的 JWT」里,点「解析令牌」查看解码后的声明,并自动用密钥校验签名。
  4. 文本输入较多,所以输入框用 Ctrl / Cmd + Enter 触发,而不是单按 Enter,避免打断换行。

JWT编码能解决什么问题

调试接口鉴权时,经常要手写或拆解一段 JWT。这个 JWT 编码工具覆盖四类真实需求:

本页不做的事情:它不连接任何认证服务、不发请求,也不能替你签发真实账号的令牌;仅用于本地构造与查看。

原理和变量

六个技术内核问题,答案只对本页成立:

  1. 用到的算法:编码用 Base64URL 编码(不是普通 Base64),签名用 HMAC-SHA256/384/512,分别由 Web Crypto 的 crypto.subtle.sign 配合 importKey 完成;none 算法则直接输出空签名段。
  2. 参数取值原因:头部固定带 alg 与 typ:"JWT",因为 RFC 7519 规定 JWT 必须声明 alg,typ 帮助接收方识别类型;算法下拉只给 HS 家族与 none,因为对称签名是调试最常见、也最不需要证书的一类。
  3. 遵循的标准:结构遵循 RFC 7519(JWT)、签名遵循 RFC 7515(JWS);Base64URL 是 RFC 4648 第 5 节的 URL 安全变体,把 + / 换成 - _ 并去掉填充 =。
  4. 输入怎样变成输出:先 base64url(header) 与 base64url(payload),用点连接成 signing input;HS* 时再算 base64url(HMAC(secret, signingInput));最终拼成 header.payload.signature 三段。
  5. 边界与阈值:HS256 摘要固定 32 字节、HS384 为 48 字节、HS512 为 64 字节;JWT 本身没有长度上限但不要塞超大载荷;浏览器对超长字符串有性能上限,几 KB 内最舒服。
  6. 常见误用的正确解释:JWT 不是加密,payload 只是 Base64URL 编码、肉眼可解码,绝不要在里面放密码等机密;none 算法跳过签名,生产环境应拒绝接受,本工具提供它是为了方便本地测试。

完整示例

示例与上方默认值完全一致(数值仅作演示):头部 {"alg":"HS256","typ":"JWT"} 编码为 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9;载荷 {"sub":"1234567890","name":"示例用户","iat":1516239022} 编码为 eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IuekuuS-i-eUqOaItyIsImlhdCI6MTUxNjIzOTAyMn0;以密钥 liuquan-demo 做 HS256 签名得到 Wb94IwocSaVFpnbRhZH28EHmrnAvR17MOipaTX3nOTI,三段用点连接即为完整令牌。点「生成令牌」应得到与此逐位相同的字符串。

输入范围与对照表

下面是 JWT 常见声明(claim)的对照表,填载荷时可直接参考;完整 18 行可一键导出。保留声明以 RFC 7519 为准,私有声明可自由添加。

声明英文全称类型说明
issIssuerstring签发者,标识谁发的令牌。
subSubjectstring主体,通常是用户唯一标识。
audAudiencestring/array受众,令牌发给谁。
expExpirationnumber过期时间,Unix 秒,过期即失效。
nbfNot Beforenumber在此时间前令牌不可用。
iatIssued Atnumber签发时间,Unix 秒。
jtiJWT IDstring令牌唯一编号,防重放。
nameNamestring常用私有声明,展示用姓名。
emailEmailstring常用私有声明,邮箱。
roleRolestring常用私有声明,角色权限。
scopeScopestring常用私有声明,授权范围。
adminAdminboolean常用私有声明,是否管理员。

CSV 带 BOM(Excel 中文不乱码),JSON 不带 BOM;复制为 TSV 可直接粘进表格软件。

结果边界与精度说明

常见问题

为什么解码后 payload 是明文?

JWT 的 payload 默认只做 Base64URL 编码,不是加密,任何人拿到令牌都能解码查看。所以不要把密码、令牌本身之外的机密放进去。

none 算法安全吗?

不安全。none 表示不签名,任何人都可篡改载荷。它只适合本地测试,生产系统应当拒绝接受 alg 为 none 的令牌。

HS256、HS384、HS512 怎么选?

三者算法相同、摘要长度不同,分别是 32、48、64 字节。一般 HS256 足够;对安全性要求更高的场景用 HS384 或 HS512,但两端必须一致。

签名校验提示失败怎么办?

先确认密钥与编码时完全一致(区分大小写、别多空格),再确认算法下拉与签发时相同;两者任一不对都会校验失败。

Base64URL 和普通 Base64 有什么不同?

URL 安全变体把 + 换成 -、/ 换成 _,并去掉末尾的 = 填充,目的是能安全放进 URL 和请求头而不被转义。

header 或 payload 不是合法 JSON 会怎样?

生成时会提示「头部/Payload 不是合法 JSON,并标出大致位置」,不会静默生成坏令牌;请检查是否少了引号或逗号。

这个工具会把我的令牌上传吗?

不会。编码、解码、验签全部在浏览器本地用 Web Crypto 完成,页面不发起任何网络请求,可断网使用。

令牌太长粘不下怎么办?

令牌本质是文本,可直接整段粘贴;如果接口要求放在 Authorization 头里,请连同 Bearer 前缀一起填,本工具只负责生成令牌本身。

相关工具

JWT 属于编码解码大类,下面这些同站工具在密码、标识与编码方向与之互补: