JWT 生成与校验工具

以 JSON 编辑头部和载荷,一键设置时间,然后用您的密钥为令牌签名。在下方粘贴令牌,即可用同一密钥检查它的签名。

免费 在浏览器中运行 核对于2026年11月10日星期二

此工具在您的浏览器中运行。您输入的内容不会发送给我们。

使用方法

  1. 编写“头部(JSON)”和“载荷(JSON)”。使用“将 iat 设为当前时间”“将 nbf 设为当前时间”或“将 exp 设为当前时间加”来填写时间。
  2. 选择“算法”,并输入“密钥”。若密钥以 Base64 形式书写,请在“密钥编码”下选择“Base64”。
  3. 复制“令牌”。它由三部分组成,以点号分隔:头部、载荷和签名。
  4. 把令牌粘贴到“待校验的令牌”中,检查其签名是否与上方的密钥相符。

JWT 如何签名

JSON Web Token(RFC 7519)由头部和载荷组成,二者都写成 JSON,并以 base64url 编码(RFC 7515),再以点号连接。签名是用密钥对这两部分计算出的 HMAC(RFC 7518 第3.2节)。头部的 alg 字段写明算法,本页面会把该字段设为您选择的算法。

页面在编码前把每个 JSON 对象写成紧凑形式,因此被签名的字节是您输入内容的紧凑形式,而不是带空格和换行的文本。校验方总是以收到的字节为准,因此令牌在任何情况下都有效。

signing input = BASE64URL(header) . BASE64URL(payload)
signature    = HMAC-SHA-256(secret, signing input)
               (HS384 and HS512 use HMAC-SHA-384 and HMAC-SHA-512)
token        = signing input . BASE64URL(signature)

载荷中的时间

声明 iat(签发时间)、nbf(生效时间)和 exp(过期时间)都是 NumericDate:自1970年1月1日00:00 UTC 起的秒数(RFC 7519 第2节与第4.1节)。在 exp 时刻及之后,以及在 nbf 时刻之前,令牌都不被接受。按钮使用您设备的时钟写入时间,因此时钟错误会导致时间错误。

校验做什么,不做什么

校验会用粘贴的头部和载荷原样重新计算 HMAC,并与签名比较。它拒绝 alg none,以及除 HS256、HS384 和 HS512 之外的所有算法,因此令牌无法选择较弱的校验方式。

它不检查声明的含义,例如 iss 是否为您预期的签发者,或 aud 是否指向您的服务。这些必须由您的应用程序检查,正如 RFC 8725 所建议的那样。

示例:密钥为 your-256-bit-secret 的 HS256

头部为 {"alg": "HS256", "typ": "JWT"},载荷为 {"sub": "1234567890", "name": "Ada Lovelace", "iat": 1516239022},UTF-8 密钥为 your-256-bit-secret,页面生成的令牌如下:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkFkYSBMb3ZlbGFjZSIsImlhdCI6MTUxNjIzOTAyMn0.nmm0qepYRjhNji3O-jq8Pvcr7l_me1_bomw4EJucQCU

用同一密钥校验,签名有效。该令牌没有 exp 或 nbf 声明,因此没有任何时间会使它无效。用其他密钥校验,则会显示签名与密钥不符。

常见问题

我的密钥会被发送到服务器吗?

不会。令牌由您的浏览器借助其自带的 SubtleCrypto 签名。密钥只在页面打开期间保留:它不会被发送、存储或记录。

为什么页面显示签名相符,而我的程序库拒绝这个令牌?

程序库可能检查 exp 或 nbf 的时间、受众或签发者,或者它以另一种编码读取密钥。请按程序库的方式把密钥读作 UTF-8 或 Base64,并用正确的时钟比较时间。

为什么 alg none 会被拒绝?

alg 为 none 的令牌没有签名,任何人都能写出它,因此服务必须拒绝。本页面在校验时拒绝它,签名时则始终写出 HMAC 算法。

密钥应该多长?

至少应与哈希输出等长:HS256 为32字节,HS384 为48字节,HS512 为64字节(RFC 7518 第3.2节)。密钥较短时页面会给出警告。

本页面能生成 RS256 或 ES256 令牌吗?

不能。它只用共享密钥进行签名和校验,使用 HS256、HS384 或 HS512。用 RSA 或 ECDSA 私钥签名的令牌需要该私钥,而本页面不接受私钥。

什么时候应为密钥选择 Base64?

只有当密钥以 Base64 书写时才选择,例如 JSON Web Key 中的 k 值。否则,密钥会按您输入的原样作为 UTF-8 文本读取,包括其中的空格。

资料来源

数据和文字最近核对于2026年11月10日星期二。

我们使用必要的 Cookie 来运行网站。经您同意后,Google 还会使用广告 Cookie 展示个性化广告。如果您拒绝,仍会看到广告,但广告不会个性化。