JWT编解码器|令牌结构调试与安全审计工具
支持HS256、RS256、ES256、PS256等算法的JWT编码器、解码器和安全审计工具。检查claims、验证签名、发现安全漏洞,全程在浏览器本地处理。
什么是JWT Encoder/Decoder?
JWT Encoder/Decoder可以创建已签名的JSON Web Token,解码现有令牌以揭示其内容,并对令牌的claims和算法选择执行自动化安全审计。JSON Web Token是无状态认证最常见的格式——API网关、OAuth提供商或微服务生成已签名的令牌,下游服务通过验证签名而非查询集中式会话存储来确认身份。当出现问题时(令牌被拒绝、某个claim的值出乎意料,或者需要验证签名逻辑),您需要在不编写自定义代码的情况下检查令牌。该工具支持使用四个算法家族的13种算法进行编码、带实时过期状态的解码、签名验证,以及检查常见漏洞的安全审计模式。所有操作均在客户端运行——您的令牌和签名密钥永远不会离开浏览器。
主要功能
- 使用HMAC (HS256/384/512)创建已签名的JWT — 输入JSON载荷和共享密钥;工具使用
jose库的SignJWTAPI对令牌进行签名。 - 支持RSA (RS256/384/512)、ECDSA (ES256/384/512)和RSA-PSS (PS256/384/512) — 粘贴PEM编码的私钥进行非对称签名;工具使用
importPKCS8导入密钥并相应签名。 - 使用
alg: none的未签名令牌 — 支持创建未签名令牌,但会用红色警告面板明确标记。 - 快速添加标准claims — 一键按钮将
iss、sub、aud、exp(+1小时)、exp(+1天)、iat、nbf和jti(来自crypto.randomUUID()的随机UUID)插入载荷编辑器。 - 解码JWT头部和载荷 — 粘贴任何JWT后,解析后的头部和载荷立即以格式化JSON的形式显示在并排面板中,算法和类型显示在头部下方。
- 检查过期状态 — 彩色状态横幅显示令牌是否已过期或有效,并附有实时倒计时(例如:"剩余2小时34分钟"或过期日期和时间)。
- 验证签名 — 提供密钥(HMAC)或PEM公钥(非对称),工具调用
jwtVerify确认签名的加密有效性。 - 彩色编码的JWT输出 — 三个令牌段以红色(头部)、紫色(载荷)和蓝色(签名)显示,便于视觉识别。
- 安全审计模式 — 分析令牌的10种不同安全问题,包括
alg: none、缺少exp、已过期令牌、未来的nbf、非常长的过期时间、弱算法,以及缺少iss、aud、subclaims。 - 批量模式 — 一次解码多个JWT令牌(每行一个),输出每个令牌的算法和载荷摘要。
- 100%客户端处理 — 使用完全在浏览器中运行的
josenpm包;不传输任何令牌或密钥。
如何使用JWT Encoder/Decoder
第一步:选择模式
工具顶部有三个模式按钮:编码、解码和安全审计。模式选择器下方的黄色安全提示提醒您,不应将签名密钥输入您不信任的工具——在使用任何密钥材料之前,这是需要阅读的良好实践。
第二步:创建JWT(编码模式)
选择算法。 分组下拉菜单按家族呈现13种支持的算法:HMAC对称(HS256、HS384、HS512)、RSA非对称(RS256、RS384、RS512)、ECDSA非对称(ES256、ES384、ES512)、RSA-PSS非对称(PS256、PS384、PS512)和无签名(none)。默认值为HS256。
编辑载荷。 JSON编辑器预填充了包含sub、name和iat(设置为页面加载时的当前Unix时间戳)的示例载荷。直接编辑此内容。使用快速添加Claims按钮插入标准claims,无需手动输入时间戳——点击+ exp (+1h)会插入一个设置为当前Unix时间戳加3600秒的exp值。
输入签名密钥。 对于HMAC算法(HS256/384/512),密码类型输入字段接受共享密钥。显示/隐藏切换按钮可显示值。对于非对称算法,多行文本区域接受以-----BEGIN PRIVATE KEY-----开头的PEM格式私钥。
点击"编码JWT"。 已签名的令牌出现在彩色编码的输出面板中。"复制"按钮复制完整令牌。"解码此令牌"按钮将其传输到解码标签页以供立即检查。
第三步:解码JWT(解码模式)
将任何JWT粘贴到令牌输入字段中。解码是即时的——无需点击按钮。工具在.处拆分令牌,使用自定义base64UrlDecode函数对每个段进行Base64URL解码,并对头部和载荷进行JSON解析。
如果令牌有exp claim,解码面板上方会出现彩色横幅:
- 带勾号的绿色:"令牌有效——剩余2小时34分钟"
- 带警告图标的红色:"令牌已过期——于[日期/时间]过期"
头部和载荷显示在并排的格式化JSON面板中,各有一个复制按钮。其下方,Claims详情面板在各自的卡片中呈现每个载荷claim。时间戳claims(exp、iat、nbf)同时显示原始Unix整数和人类可读的日期字符串。
签名和验证部分显示原始签名字符串,并提供用于验证的密钥输入。输入密钥或公钥并点击"验证签名"。有效签名时结果卡片变绿,无效时变红。
第四步:运行安全审计(审计模式)
切换到安全审计标签页并粘贴令牌。令牌被解析时结果立即显示。每个结果卡片显示严重性徽章(CRITICAL、WARNING、NOTE或INFO)、标题、通俗描述和具体建议。审计检查10个条件:
alg: none或缺失 — CRITICAL- 弱算法
HS1— WARNING - 对称算法在使用中 — NOTE
- 缺少
expclaim — WARNING - 令牌已过期 — CRITICAL
- 过期时间超过一年 — NOTE
nbfclaim在未来 — WARNING- 缺少
issclaim — INFO - 缺少
audclaim — INFO - 缺少
subclaim — INFO
如果没有发现问题,INFO卡片显示"未发现重大问题——请继续在服务器端验证令牌并保持签名密钥的保密性。"
实用示例
为API生成测试令牌
您的后端期望具有sub、iss、aud和exp claims的HS256签名JWT。在编码模式下,选择HS256,从默认载荷开始,然后依次点击+ iss、+ sub、+ aud和+ exp (+1h)构建完整载荷。输入测试密钥并点击编码。将生成的令牌复制到API测试工具或HTTP头部。测试失败时,将令牌粘贴到解码模式以验证claims是否符合预期——Claims详情面板可以轻松确认每个值,无需手动进行Base64解码。
调试"Token Expired"API错误
您的应用程序收到401 Unauthorized响应。将应用程序Authorization头部中的令牌粘贴到解码模式。过期横幅立即告诉您令牌是否已过期以及何时过期。如果它三分钟前过期,问题要么是没有刷新逻辑的短期令牌,要么是客户端和令牌颁发者之间的时钟偏差。Claims详情面板中的iat和exp claims以人类可读的日期显示问题窗口。
安全审查前审计令牌
在代码审查或渗透测试之前,将生产JWT样本粘贴到安全审计模式以识别容易改进的问题。因alg: none或缺少exp而返回CRITICAL结果的令牌需要立即关注。多服务架构中对称算法的NOTE值得在审查期间讨论。审计输出可以直接复制粘贴到安全结果文档中。
提示和最佳实践
公共API使用非对称算法(RS256、ES256)。 HMAC(HS256)算法使用共享密钥:任何能够验证令牌的服务也可以创建令牌。使用RS256或ES256时,只有私钥持有者才能签署新令牌,而任何服务都可以使用分发的公钥进行验证。安全审计模式出于这个原因对HS算法标注NOTE。
始终设置exp claim。 没有过期时间的令牌除非明确撤销,否则永久有效。快速添加Claims部分提供1小时和1天过期的一键按钮。访问令牌应在几分钟到几小时内过期;长时间会话使用刷新令牌。
对一次性令牌使用jti。 + jti (UUID)快速添加按钮插入由crypto.randomUUID()生成的唯一令牌标识符。在服务器端,您可以存储并检查此值以防止密码重置或电子邮件确认流程中的令牌重放攻击。
不要在生产中使用none算法。 选择alg: none时工具创建未签名令牌,但显示红色警告面板。安全审计模式将alg: none评为CRITICAL。该算法仅应出现在有意禁用令牌验证的测试环境中。
常见问题和故障排除
"JWT格式无效。JWT应有3个用点分隔的部分。" — 您粘贴的字符串没有恰好两个.字符。确保您复制了包含所有三个段的完整令牌。带有尾随换行符或空格的JWT也会失败——边缘的空白字符会被修剪,但嵌入的空白字符会导致此错误。
"Base64编码无效" — 令牌的某个段不是有效的Base64URL。如果令牌在复制粘贴过程中被截断,或者字符串是不同的编码格式(例如OAuth的不透明引用令牌,根本不是JWT),就会发生这种情况。
"需要密钥"/"需要私钥" — 您在未填写签名密钥字段的情况下点击了编码。HMAC算法需要非空密钥;非对称算法需要PEM私钥。
"JSON载荷无效" — 载荷编辑器包含格式错误的JSON。检查尾随逗号、未加引号的键或单引号字符串。快速添加Claims按钮始终生成有效的JSON,所以如果您手动编辑了载荷,请查找语法错误。
即使使用正确的密钥,验证也返回无效 — 确保使用的算法与令牌签名时相同(显示在头部的alg字段中,解码模式自动显示)。对于非对称验证,确保提供的是公钥而非私钥。
alg: none令牌在验证时显示"无法验证" — 未签名令牌没有可验证的签名。工具为这种情况返回特定的"不支持"状态,并在alg为none时禁用验证按钮。
隐私和安全
JWT Encoder/Decoder使用在您浏览器中运行的jose库在本地处理所有令牌和密钥。没有任何JWT、密钥或私钥会传输到任何服务器。工具在编码、解码或验证期间不发出任何网络请求。工具中显示的黄色安全提示是真实的:对于生产签名密钥,请将任何在线工具视为不受信任。对于使用非生产凭据的开发和调试,该工具可安全使用。打开浏览器DevTools并检查网络标签,自行验证行为——在任何操作期间您都不会看到出站请求。
常见问题
JWT工具免费使用吗? 是的。该工具完全免费,无需账户或注册。
可以离线使用吗? 可以。页面加载后,所有编码、解码和审计都在本地运行。JWT操作不进行任何网络请求。
我的令牌和签名密钥安全吗? 工具在运行期间不发出网络请求。您的令牌和密钥保留在您的浏览器标签页中。尽管如此,请避免在任何基于浏览器的工具中输入生产私钥。使用测试密钥或非生产凭据。
支持哪些算法? 工具支持13种算法:HS256、HS384、HS512(HMAC)、RS256、RS384、RS512(RSA PKCS#1)、ES256、ES384、ES512(ECDSA)、PS256、PS384、PS512(RSA-PSS)和none(无签名)。jose库处理加密操作。
可以在没有原始密钥的情况下验证签名吗? 不可以。签名验证需要签名密钥(HMAC)或对应的公钥(非对称)。解码——读取头部和载荷——不需要任何密钥,立即可用。
私钥需要什么格式? 非对称签名需要PKCS#8 PEM格式的私钥(以-----BEGIN PRIVATE KEY-----开头)。jose库的importPKCS8函数处理导入。不支持PKCS#1格式(以-----BEGIN RSA PRIVATE KEY-----开头);使用openssl pkcs8 -topk8 -nocrypt进行转换。
解码模式和安全审计模式有什么区别? 解码模式显示令牌的内容——头部、载荷、claims和过期状态——并允许您验证签名。安全审计模式专注于识别令牌设计中的安全弱点:缺少的claims、弱算法、过期令牌和配置问题。两种模式都不需要签名密钥。
为什么安全审计会标记我的HS256令牌? 审计注意到(严重性NOTE,而非WARNING或CRITICAL)HMAC算法使用共享密钥,这意味着任何拥有密钥的服务都可以验证和创建令牌。这是多服务系统的架构考量,而不是令牌中的错误。注释建议对只有一个服务应该能够颁发令牌的系统使用非对称算法。
可以在不知道算法的情况下解码JWT吗? 可以。用于签署令牌的算法存储在头部的alg字段中。解码首先读取头部,从而揭示算法。只有在想要验证签名时才需要知道算法(并拥有密钥)。
批量模式如何工作? 使用切换按钮启用批量模式,然后每行输入一个JWT。点击"全部处理"以解码每个令牌。输出表格显示每个令牌的算法(来自头部)及其完整载荷(JSON字符串格式)。格式错误的令牌在输出列中显示错误。
相关工具
Base64编码器/解码器处理JWT段内使用的URL安全Base64编码。JSON格式化工具在您想探索嵌套结构时用于格式化已解码的载荷JSON。密码生成器可以生成强随机密钥用作HMAC签名密钥。
立即试用JWT Encoder/Decoder:JWT Encoder/Decoder