使用方法
- 编写“头部(JSON)”和“载荷(JSON)”。使用“将 iat 设为当前时间”“将 nbf 设为当前时间”或“将 exp 设为当前时间加”来填写时间。
- 选择“算法”,并输入“密钥”。若密钥以 Base64 形式书写,请在“密钥编码”下选择“Base64”。
- 复制“令牌”。它由三部分组成,以点号分隔:头部、载荷和签名。
- 把令牌粘贴到“待校验的令牌”中,检查其签名是否与上方的密钥相符。
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 文本读取,包括其中的空格。
资料来源
- RFC 7519:JSON Web Token (JWT)(英文)
- RFC 7515:JSON Web Signature (JWS),附录 A.1 的测试向量(英文)
- RFC 7518:JSON Web Algorithms (JWA),第3.2节(英文)
- RFC 8725:JSON Web Token Best Current Practices(英文)
数据和文字最近核对于2026年11月10日星期二。