JWT编码器(生成与签名)

根据Header和Payload的JSON,使用HS256、HS384或HS512生成HMAC签名的JWT(JSON Web Token),全部在浏览器内完成。包括密钥在内的输入内容不会发送到服务器。

支持的HMAC签名算法一览

算法 哈希函数 签名长度 说明
HS256 SHA-256 256位(32字节) 使用最广泛的默认HMAC签名,是OAuth 2.0、OpenID Connect ID令牌等许多实现的标准选择。
HS384 SHA-384 384位(48字节) 当需要比HS256更长的签名以提升安全余量时可选用的中间选项。
HS512 SHA-512 512位(64字节) 签名长度最长,通常与足够长的随机密钥搭配使用。

生成并签署 JWT

本工具由标头与载荷的 JSON 当场组装出 JWT,并以 HS256、HS384 或 HS512 施加 HMAC 签名。包括密钥在内,您输入的一切都只在浏览器内处理,绝不送往服务器。

**这里最常被误解的一点是:签名是为了察觉篡改,而非加密。** JWT 的标头与载荷只是经过 Base64URL 编码,**因此凡是拿到令牌的人,都能把里头的内容照原样读出来。** 密码与个人资料不该放进载荷,正是这个缘故。另一个要点在于密钥的性质:HS 系列的做法是**签署的一方与验证的一方共用同一把密钥**。若想把验证交给别处,便该选 RS256 或 ES256 这类公钥方式,从而免去把密钥交出去。

生成的步骤

  1. 输入标头的 JSON 形如 `{"alg":"HS256","typ":"JWT"}`,请与所选的算法保持一致。
  2. 输入载荷的 JSON 写上所需的声明,如 `sub`、`iat`、`exp`。**凡是想保密的值,一概不要放进来。**
  3. 选择签名算法 可在 HS256、HS384、HS512 之间选择,数字即哈希的位长。
  4. 输入密钥取得令牌 得到的是以点连接三段的字符串。

用好本工具的小技巧

  • 生成的JWT仅通过浏览器内的Web Crypto API签名,包含密钥在内的输入内容不会发送到toolbase.cc的服务器。
  • 切换签名算法(HS256/HS384/HS512)会自动更新Header JSON中的alg字段。若需添加kid等其他声明,可直接编辑Header。
  • 本工具仅支持HMAC(对称密钥)方式。如需RS256、ES256等公钥方式的签名,请使用Node.js等服务器端的库。
  • 编辑Header或Payload后,请务必再次点击"生成JWT",否则显示的仍是编辑前内容生成的旧JWT。
  • 如需立即确认生成的JWT内容,可将其粘贴到姊妹工具JWT解码器中查看Header和Payload。

这些场景会用到

测试接口的行为

**能随手铸出带有任意声明的令牌,便可迅速把授权规则的各个分支都走一遍。**

检验有效期的处置

造一个 `exp` 落在过去的令牌,确认过期的令牌确实会被挡下。

为测试准备令牌

可产出内容固定的令牌,充作自动化测试里的夹具。

学习 JWT 的构造

一面改动输入一面生成,便能眼看着每一部分落到令牌的哪个位置。

JWT 的术语

标头
第一段,说明算法与类别,带有 `alg` 与 `typ`。
载荷
第二段,收纳各项声明。**它仅仅经过 Base64URL 编码,并未加密。**
签名
第三段,由标头与载荷连同密钥算出。**它用来察觉篡改,对隐藏内容则毫无作用。**
声明
载荷中的每一项。标准的有 `sub`(主体)、`iat`(签发时刻)、`exp`(有效期)等。
HMAC
使用共享密钥的消息认证方式。**签署的一方与验证的一方必须持有同一把密钥。**
Base64URL
把符号换过、以便放进网址的 Base64:`+` 与 `/` 换作 `-` 与 `_`,末尾的填充也略去。

常见问题

不建议这样做。虽然签名处理本身在浏览器内完成且是安全的,但将密钥输入浏览器工具这一行为本身并不符合生产环境的安全方针。本工具主要用于API开发阶段的调试或学习用途。

HS256是发送方与接收方共享同一密钥的对称密钥方式,RS256则是用私钥签名、用公钥验证的公钥(非对称密钥)方式。本工具仅支持HS256、HS384、HS512这三种HMAC方式,不支持RS256、ES256等公钥方式。

可以,Header JSON可以直接编辑。但如果所选算法(实际用于计算签名的算法)与alg字段的值不一致,其他实现在验证该JWT时可能会报错,因此请务必保持两者一致。

您可以将生成后的JWT字符串粘贴到姊妹工具「JWT解码器」中,立即查看Header和Payload的内容。不过签名本身的有效性,只能由持有相同密钥的服务器端验证逻辑最终确认。
工具君

闲话 ― 为什么JWT的签名可以「仅在浏览器内」完成

JWT的签名算法大致分为两类:发送方和接收方共享同一密钥的「对称密钥方式(HMAC,即HS256/HS384/HS512)」,以及用私钥签名、用公钥验证的「公钥加密方式(RS256、ES256等)」。前者可以借助W3C标准化的Web Crypto API(SubtleCrypto)中的crypto.subtle.sign(),无需任何外部库即可在浏览器内完成计算,因此本工具刻意只支持HMAC方式。

HMAC签名的安全性完全取决于密钥是否难以被猜到,而与Header或Payload的内容无关。RFC 7518(JSON Web Algorithms)建议HS256的密钥长度应至少为256位(32字节);若使用短单词或字典中常见的字符串作为密钥,签名就有被暴力破解伪造的风险。在实际生产环境中,应使用随机数生成器生成的足够长的随机字符串作为密钥。

本工具是面向开发者的实用工具,主要用于API开发时的调试或测试Webhook签名验证逻辑。您输入的密钥仅在浏览器内存中处理,不会向外部发送,但共享设备或浏览器扩展收集剪贴板或输入内容的风险并非为零。强烈建议即使只是为了调试,也不要将生产环境中实际使用的密钥输入此类工具。