DevToolPal
简

JWT 生成与签名

用 JSON 载荷生成并签名 JSON Web Token,支持 HS256/384/512,以及使用 PEM 私钥的 RS、PS、ES 算法。

本地处理,不上传

选项

密钥格式

载荷(JSON)

0 字符 · 0 B

JWT

0 字符 · 0 B

功能说明

JSON Web Token(JWT,RFC 7519)是一种紧凑、URL 安全的字符串,由点分隔成三部分:声明签名算法的头部、包含声明(claims)的载荷,以及对前两部分的签名。API 用 JWT 作为 Bearer 令牌,身份提供方用它作为 ID 令牌。

本工具根据 JSON 载荷生成并签名令牌,支持:

  • HS256、HS384、HS512:使用共享密钥的 HMAC,密钥可以是文本或 Base64。
  • RS256、RS384、RS512 和 PS256、PS384、PS512:使用 PEM 私钥的 RSA 签名。
  • ES256、ES384、ES512:使用 EC 私钥的 ECDSA 签名。

使用方法

  1. 以 JSON 对象写好载荷,或点击示例。
  2. 选择算法,在输入框顶部输入密钥或粘贴 PEM 私钥。
  3. 可以把 iat 设为当前时间、添加有效期(exp),或添加密钥 ID 等额外头部字段。
  4. 从输出框复制令牌,可以粘贴到 JWT 解码工具里查看。

示例

密钥为 your-256-bit-secret 时,用 HS256 签名下面的载荷,会得到 jwt.io 上那个经典示例令牌:

{"sub":"1234567890","name":"John Doe","iat":1516239022}

头部固定写成 {"alg":"HS256","typ":"JWT"},后面跟上你添加的额外字段;alg 始终与所选算法一致。

最佳实践

用 exp 声明让令牌短期有效,并设置 iss 和 aud,防止给一个服务的令牌被拿去另一个服务重放。服务器端校验签名时,务必显式列出允许的算法,并拒绝 none。HMAC 密钥应足够长且随机,至少与哈希输出等长(HS256 为 32 字节)。

常见问题

› 应该选哪种算法?

选服务器校验时用的那种。HS256 用共享密钥,常见于单个系统内部。RS256 和 ES256 用私钥签名,任何人都能用公钥校验,适合需要多个服务验证的令牌。ES256 的签名比 RS256 短得多。

› 支持哪些私钥格式?

支持 PEM 格式的 PKCS#8(BEGIN PRIVATE KEY)、PKCS#1 RSA(BEGIN RSA PRIVATE KEY)和 SEC1 EC(BEGIN EC PRIVATE KEY)。加密的私钥需要先导出为无口令版本。ES256、ES384、ES512 分别需要 P-256、P-384、P-521 曲线的密钥。

› JWT 的载荷是保密的吗?

不是。头部和载荷只是做了 Base64URL 编码,拿到令牌的人都能读出来。签名防止的是篡改,而不是读取。不要把密码等机密信息放进 JWT 载荷。

› 我的密钥或私钥会被保存或发送出去吗?

不会。签名在浏览器中通过 Web Crypto API 完成,密钥只保存在当前页面的内存里,不会存储、不会写进地址栏,也不会包含在分享链接里。即便如此,也不要把生产环境的密钥粘贴到你无法掌控的网页中。