JWT 编码器/构建器
指导
JWT 编码器/构建器
直接在您的浏览器中构建已签名的 JSON Web Token。只需输入头部和有效载荷,选择 HMAC 算法,提供共享密钥,即可复制一个可用于 API 测试、调试或本地开发的即用型令牌。所有签名操作均通过 SubtleCrypto Web API 完成,因此您的密钥和声明永远不会离开页面。
如何使用
- 编辑 标题(JSON) 块以包含
typ以及任何自定义字段,例如kid。的alg值将被下方的算法选择器覆盖。 - 编辑 有效载荷(JSON) 块包含标准声明,如
iss,sub,iat,exp,以及您的服务所需的任何自定义声明。 - 选择一个算法: HS256, HS384, 或者 HS512.
- 将您的 共享密钥。使用至少与哈希输出长度相等的随机字符串,以匹配每个算法的安全级别。
- 从输出框中复制生成的令牌,或分别复制头部、有效载荷或签名部分。
特征
- 三种 HMAC 算法 – HS256、HS384 和 HS512 覆盖了所有常见的 HMAC 签名 JWT 使用场景。
- 实时签名 – 当您编辑任何字段时,签名令牌会实时重新生成,因此您可以立即看到每次更改的影响。
- 内联 JSON 验证 – 在令牌成为损坏令牌之前,如果头部或有效载荷的 JSON 格式不正确,会显示清晰的错误信息。
- 分部分复制 – 可以复制完整的令牌,或单独获取 base64url 编码的头部、有效载荷或签名部分。
- 仅客户端 – 签名操作在您的浏览器中通过 SubtleCrypto 完成。密钥和声明永远不会发送到服务器。
- 与 JWT 解码器配对 – 在编码器和我们现有的 JWT 解码器工具之间进行令牌往返,以验证声明。
何时使用此工具
- 测试一个期望带有特定声明的 bearer 令牌的 API 端点。
- 重现一个已知有效的令牌失败的认证场景。
- 教授或学习 JWT 签名是如何构建的。
- 为本地开发生成短期令牌,而无需搭建认证服务器。
常问问题
-
什么是 JWT 以及为何需要签名?
JSON Web Token(JWT)是一种紧凑的 URL 安全字符串,由头部、有效载荷和签名组成。签名使接收方能够验证头部和有效载荷是使用共享密钥生成的,并且在传输过程中未被修改。如果没有有效的签名,任何人都可以伪造声明,因此所有用于身份验证或授权的令牌都必须签名。
-
HMAC 签名如何使用 HS256、HS384 和 HS512?
HMAC(基于哈希的消息认证码)将一个密钥与一个密码学哈希函数结合使用。HS256 使用 SHA-256 生成 256 位的 MAC,HS384 使用 SHA-384,HS512 使用 SHA-512。签名者对头部和有效载荷通过点连接后的 base64url 编码内容计算 HMAC,然后附加 base64url 编码的 MAC。任何拥有相同密钥的人都可以重新计算 MAC 并进行比对以验证其真实性。
-
为什么 JWT 使用 base64url 而不是标准 base64?
标准 base64 使用 +、/ 和 = 字符,这些字符在 URL 中必须进行百分号编码,当令牌作为查询参数或 HTTP 头传递时可能会出现问题。base64url 将 + 替换为 -,将 / 替换为 _,并移除尾部的 = 填充。这生成一个可以直接放入 URL、HTTP 头和 Cookie 中的安全字符串,无需额外编码。
-
什么样的密钥对 HMAC 签名的 JWT 足够安全?
对于 HS256,密钥应至少为 32 个随机字节(256 位);对于 HS384,至少为 48 个字节;对于 HS512,至少为 64 个字节。短而人为选择的密码容易受到暴力破解攻击,因为攻击者一旦捕获一个令牌,就可以在离线环境中猜测密钥。请从加密随机源生成密钥,将其存储在源代码树之外,并在怀疑暴露时定期轮换密钥。
