JWT 编解码器

头部
复制
                    {
    "alg": "HS256"
}
                
载荷
复制
                    {
    "urn:example:claim": true,
    "iat": 1669056231,
    "iss": "urn:example:issuer",
    "aud": "urn:example:audience"
}
                
密钥验证失败
概述
Generated by AI

JWT 解码器/编码器是一款用于 JSON Web Token(JWT)处理的开发工具,支持解码查看 JWT 内容、验证签名有效性,以及使用多种算法编码生成新的 JWT, 适用于 API 开发、身份认证调试、令牌分析等场景。

什么是 JWT

JSON Web Token(JWT)是一种开放标准(RFC 7519),用于在各方之间安全地传输信息。JWT 由三部分组成:头部(Header)、载荷(Payload)和签名(Signature),使用点号分隔。

头部包含令牌类型和签名算法信息,载荷包含声明(Claims)即实际传输的数据,签名用于验证令牌未被篡改。JWT 广泛应用于 Web 应用的身份认证、单点登录、API 授权等场景。

功能特点

粘贴 JWT 后工具自动解码并显示头部和载荷的 JSON 内容。支持使用密钥(对称算法)或公钥(非对称算法)验证签名有效性,确保令牌未被篡改。

支持常见的 JWT 签名算法,包括对称算法(HS256、HS384、HS512)和非对称算法(RS256、RS384、RS512、ES256、ES384、ES512 等)。

可以自定义头部和载荷内容,选择签名算法,输入密钥或私钥,生成符合标准的 JWT。支持设置过期时间,自动计算 exp 字段。解码后的头部和载荷以格式化的 JSON 形式展示,验证结果直观显示。

使用方法

切换到"解码"模式,在输入框粘贴完整的 JWT 字符串,工具自动解码并显示头部和载荷内容,查看令牌包含的声明信息,点击复制按钮获取 JSON 内容。

验证签名时,在解码模式下粘贴 JWT, 查看头部中的 alg 字段确定签名算法,根据算法类型输入密钥或公钥,工具自动验证签名并显示结果。

编码生成 JWT 时,切换到"编码"模式,选择签名算法,编辑载荷内容添加自定义声明,设置过期时间如 2h(2 小时)、30m(30 分钟)、1d(1 天),输入密钥或私钥,工具自动生成 JWT。

签名算法说明

对称算法(HMAC) 使用 HMAC SHA-256 算法,HS384 使用 HMAC SHA-384,HS512 使用 HMAC SHA-512。对称算法使用相同的密钥进行签名和验证,适合服务器端内部使用,密钥需要严格保密。

非对称算法(RSA/ECDSA)/RS384/RS512 使用 RSA 公钥加密算法,私钥签名,公钥验证。ES256/ES384/ES512 使用椭圆曲线数字签名算法,私钥签名,公钥验证。非对称算法适合分布式系统,公钥可以公开分发用于验证。

应用场景

开发 API 时解码 JWT 查看请求中携带的用户信息和权限声明,验证签名确保令牌来自可信来源。分析第三方服务返回的 JWT, 了解令牌结构和包含的用户信息。在开发环境生成测试用的 JWT, 模拟不同用户、权限或过期时间,测试应用的认证逻辑。检查 JWT 是否包含敏感信息,验证签名算法是否安全。

使用建议

对称算法的密钥和非对称算法的私钥必须严格保密,不要在客户端代码、版本控制系统或公开位置存储密钥。对称算法的密钥长度应至少与算法哈希长度一致,非对称算法建议使用 2048 位以上的 RSA 密钥。

JWT 应设置较短的过期时间(如 15 分钟到 1 小时),减少令牌被盗用的风险。JWT 的载荷是 Base64 编码,任何人都可以解码查看,不要在载荷中存储密码、信用卡号等敏感信息。

接收到 JWT 后必须验证签名有效性,防止令牌被篡改。生产环境推荐使用 RS256 或 ES256 等非对称算法,便于公钥分发和密钥管理。

注意事项

JWT 是编码和签名,不是加密。任何人都可以 Base64 解码查看载荷内容,签名只能验证令牌未被篡改,不能保护内容隐私。

JWT 包含完整的载荷信息,令牌体积较大。在 HTTP 头部传输时,过大的 JWT 可能导致性能问题,载荷应保持精简。

JWT 一旦签发,在过期前无法撤销。如需撤销,需要在服务器端维护黑名单,失去 JWT 的无状态优势。JWT 的 expiat 字段依赖系统时钟,确保服务器时钟同步。

在本工具中输入的 JWT 和密钥在浏览器本地处理,不会上传到服务器,但仍建议不要在生产环境的真实密钥中使用此工具。

常见问题

JWT 可以用来加密数据吗?

不可以,JWT 是签名和编码,不是加密,载荷内容可以被任何人 Base64 解码查看,如需加密应使用 JWE。

为什么验证签名总是失败?

检查密钥或公钥是否正确,算法是否与 JWT 头部的 alg 字段一致,非对称算法确保使用正确的公钥/私钥对。

如何生成 RSA 密钥对?

可以使用 OpenSSL 生成:openssl genrsa -out private.pem 2048(私钥)和 openssl rsa -in private.pem -pubout -out public.pem(公钥)。

特点

  1. 所有处理在浏览器本地完成,不依赖第三方服务
  2. 更加注重隐私保护
  3. 支持多种签名算法(HS256/RS256/ES256 等)
  4. 支持解码和编码双向操作
  5. 支持设置过期时间,自动计算 exp 字段
  6. 实时验证签名有效性
展开更多