免费转换器

JWT 令牌 解码器

在浏览器中即时解码 JWT(JSON Web Token)的头部和载荷。免费、私密、纯客户端处理,数据不会发送到任何服务器。

关于此工具

JSON Web 令牌 (JWT) 是一种紧凑的 URL 安全格式,用于在两方之间传输声明,由 RFC 7519 定义。JWT 是由点分隔的三个 base64url 编码段:标头(算法和令牌类型)、有效负载(声明)和签名(真实性的加密证明)。标头和负载是 JSON,base64url 编码以确保 URL 安全;签名在编码标头和有效负载上使用多种算法(HS256、RS256、ES256 等)之一。

解码 JWT(将其分成段并对每个段进行 Base64 解码)不需要任何秘密。任何拥有令牌文本的人都可以读取其标头和有效负载。但是,签名只能使用秘密 (HMAC) 或公钥(非对称)进行验证。解码是为了检查;验证就是证明真实性。

该解码器分割令牌,对每个段进行 Base64 解码,将标头和有效负载解析为 JSON,并显示结果。它不会尝试签名验证,因为这需要解码器没有的秘密或公钥。解码的输出是只读检查——对于调试令牌很有用,但不能替代应用程序代码中的正确验证。

为什么要解码 JWT

调试身份验证问题几乎总是涉及检查令牌。在代码中看起来有效的令牌可能有错误的声明、意外的算法、过期的 exp 时间戳或受众不匹配。解码令牌可以准确揭示发行者生产的内容。

在集成工作期间检查令牌也有帮助。连接到第三方 API 或身份提供商时,通过解码示例令牌可以最好地理解实际的声明名称、格式和结构,而不是依赖可能过时的文档。

使用方法

粘贴token,获取解析的内容。

  1. 粘贴您的 JWT: 将完整令牌 (header.payload.signature) 放入输入区域。解码器接受带有或不带有可选承载前缀的令牌。
  2. 检查标题: 标头显示签名算法 (alg) 和令牌类型 (typ)。常见的算法有HS256、RS256和ES256。注意 alg: none,它表示未签名的令牌,并且在生产中很少是安全的。
  3. 检查有效负载: 有效负载包含声明:iss(发行者)、sub(主题)、aud(受众)、exp(到期)、iat(发行于)以及任何特定于应用程序的声明。标准时间戳是 Unix 纪元秒。
  4. 单独验证: 解码器不验证签名。要检查真实性,请使用应用程序代码中的适当密钥或公钥通过 JWT 库运行令牌。

常见用例

技术细节

JWT 格式是由点连接的三个段。每个段都是 base64url 编码的——base64 的 URL 安全变体,使用 - 和 _ 而不是 + 和 /,有时会省略填充。解码需要撤消 URL 安全替换、填充段和 base64 解码。

解码后,标头和负载为 JSON。签名段是二进制的(原始签名字节)并且不可读;它需要验证密钥才能有用。

RFC 7519 中定义的常见声明:iss(发行者)、sub(主题标识符)、aud(受众)、exp(以 Unix 纪元秒为单位的到期时间)、nbf(不早于时间戳)、iat(在时间戳处发行)、jti(唯一令牌 ID)。特定于应用程序的声明可以以任何名称出现。

最佳实践

常见问题

将我的 JWT 粘贴到此处安全吗?
是的。解码完全在您的浏览器中进行 - 令牌永远不会发送到任何服务器。但是,JWT 是凭据 - 不要公开共享它们(在屏幕截图、Stack Overflow 帖子等中),因为它们可能会授予对您帐户的访问权限。
该工具是否验证 JWT 签名?
该工具解码并显示令牌内容。签名验证需要密钥 (HMAC) 或公钥 (RSA/ECDSA),这些密钥应保留在您的服务器上。该工具显示所使用的算法,但如果没有密钥则无法验证。
标准 JWT 声明是什么意思?
iss = 发行者、sub = 主题(用户 ID)、exp = 过期时间(Unix 时间戳)、iat = 发行时间、nbf = 不早于、aud = 受众、jti = JWT ID。自定义声明可以包含任何特定于应用程序的数据。
为什么任何人都可以解码 JWT?
JWT 是编码的,而不是加密的。有效负载采用 Base64URL 编码(未加密),因此任何人都可以读取它。签名防止篡改,而不是读取。切勿将敏感数据(密码、SSN)存储在 JWT 有效负载中。
为什么有些令牌缺少签名?
带有 alg: none 的令牌没有签名。根据规范,它们是有效的 JWT,但不提供真实性保证,不应在生产中被接受。
JWT 是否加密?
标准 JWT 有效负载已签名但未加密。 JWE(JSON Web 加密,RFC 7516)是加密令牌的单独格式。大多数野外 JWT 都是 JWS(仅签名)。
我的令牌是否上传到服务器?
不会。解码发生在您的浏览器中;令牌不会离开您的设备。
JWT 通常有多长?
从几百到几千个字符不等。长度取决于声明的数量和大小加上签名长度(取决于算法)。