nicetool.dev logo

什么是 JWT?

JSON Web Token (JWT) 是一个开放标准 (RFC 7519),它定义了一种紧凑且自包含的方式,用于作为 JSON 对象在各方之间安全地传输信息。此信息可以经过验证和信任,因为它经过数字签名。

JWT 结构

JWT 是由三个经 Base64URL 编码的部分组成的字符串:标头 (算法和令牌类型)、有效载荷 (数据/声明) 和 签名。这些部分通过点 (.) 分隔,格式如下:

header.payload.signature

常见用例

  • 授权:最常见的场景。用户登录后,随后的每个请求都将包含 JWT,允许用户访问路由、服务和资源。
  • 信息交换:JWT 是在各方之间检查有效凭据的好方法。
  • 无状态会话:无需在服务器上保留会话数据;令牌包含所有必要的用户信息。

隐私与安全

您的安全是我们的首要任务。所有 JWT 解码和验证逻辑都在您浏览器的 JavaScript 中客户端进行。令牌、头部或负载永远不会发送到我们的服务器。

100% 基于浏览器

JWT 调试器使用方法

  1. 1

    把以 eyJ 开头的令牌粘贴到 Encoded 框中,头部和载荷会立即解码并以格式化的 JSON 显示。

  2. 2

    查看标准声明。exp、iat、nbf 等时间会显示为可读日期,可以立即看出令牌是否已过期或尚未生效。

  3. 3

    如需验证签名,输入 HMAC 密钥(HS256/384/512)或 PEM 格式公钥(RS256/384/512、ES256/384/512),工具会提示签名是否匹配。

  4. 4

    切换到 Generator 模式可创建测试令牌:编辑载荷、选择算法、输入密钥或私钥,然后复制签名后的 JWT。

实际应用示例

排查 401 错误

API 返回 401 Unauthorized 时,解码令牌查找过期的 exp、错误的 aud(受众)或缺失的 scope 声明。

检查身份提供商的令牌

查看 Auth0、Keycloak、Firebase 或 Azure AD 签发的 ID 令牌,确认应用实际收到哪些声明(email、roles、groups)。

测试基于角色的访问控制

用开发环境密钥分别生成 role 为 "admin" 和 "viewer" 的令牌,测试权限检查的两个分支。

验证密钥轮换

轮换密钥后,粘贴新令牌和新公钥,确认头部的 kid 与签名都对应新密钥。

常见问题

JWT 是加密的吗?+

通常不是。标准 JWT(JWS)只是经过 Base64URL 编码并签名,任何人都能读取载荷,所以不要在其中放密码或敏感个人信息。加密令牌(JWE)是另一种格式。

三个部分分别代表什么?+

header.payload.signature:头部说明算法和令牌类型,载荷包含声明,签名证明前两部分由持有密钥的一方生成且未被篡改。

把生产环境令牌粘贴到这里安全吗?+

解码和验证完全在浏览器中进行,不会向我们的服务器发送任何内容。但有效令牌在过期前就像密码一样,建议使用测试令牌,或在调试后吊销真实令牌。

应该用 HS256 还是 RS256?+

HS256 使用同一个共享密钥签名和验证,适合单一服务。RS256 和 ES256 用私钥签名、公钥验证,适合多个服务验证同一签发方令牌的架构。