You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何验证生成的JWT Token有效性?jwt.io显示签名无效

JWT签名无效问题排查与验证方案

问题描述

生成的JWT Token在jwt.io显示"invalid signature":

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyTmFtZSI6ImFkbWluIiwiVFRJRCI6IjEyMzQ1NiIsImV4cCI6MTY4Nzc2Mzg3MiwiaXNzIjoic2FtcGxlIiwiYXVkIjoic2FtcGxlIn0.SUHPiDut67KM6LcbzYEF2CCMKiQlB5JMdiqqgIurJHg

生成Token的C#代码如下:

private static string generateJwtToken(string username, string password, string TTid)
{
   System.Net.ServicePointManager.ServerCertificateValidationCallback += (se, cert, chain, sslerror) => { return true; };

     User user = new User();
     user.Username = username;
     user.Password = password;
     user.TTID = '123456';
     var tokenHandler = new JwtSecurityTokenHandler();
     var key = Encoding.ASCII.GetBytes("sample2023TTTTASASA");
     var securityKey = new SymmetricSecurityKey(key);
     var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);
     var secToken = new JwtSecurityToken(
     signingCredentials: credentials,
     issuer: "sample",
     audience: "sample",
     claims: new Claim[] { new Claim("userName", user.Username.ToString()), new Claim("TTID", '123456'), },
     expires: DateTime.UtcNow.AddDays(1));
     var handler = new JwtSecurityTokenHandler();
     return handler.WriteToken(secToken);
}

签名无效的原因

  • 密钥与算法不匹配:jwt.io验证时必须输入和生成代码完全一致的密钥sample2023TTTTASASA,同时要确保选择的算法是HS256(对应代码中的SecurityAlgorithms.HmacSha256),二者任一错误都会导致签名验证失败。
  • 编码差异:代码中用Encoding.ASCII.GetBytes转换密钥,若在jwt.io输入密钥时存在全角字符、多余空格或编码选择错误,也会引发签名不匹配。
  • 代码笔误:代码里user.TTID = '123456'和new Claim("TTID", '123456')使用了单引号,C#中单引号仅用于单个字符,此处赋值6个字符的字符串会直接编译报错,若实际运行代码未修正此问题,Token生成逻辑本身就存在异常。

验证JWT有效性的方法

1. 正确使用jwt.io验证

  • 将Token粘贴到jwt.io左侧"Encoded"输入框;
  • 在右侧"Verify Signature"区域输入密钥sample2023TTTTASASA,确认算法选择HS256;
  • 检查右侧"Payload"是否与生成的Claims一致,同时确认出现"Signature Verified"提示。

2. C#代码验证

通过JwtSecurityTokenHandler完成验证,示例代码:

private static bool ValidateJwtToken(string token)
{
    var tokenHandler = new JwtSecurityTokenHandler();
    var key = Encoding.ASCII.GetBytes("sample2023TTTTASASA");
    try
    {
        tokenHandler.ValidateToken(token, new TokenValidationParameters
        {
            ValidateIssuerSigningKey = true,
            IssuerSigningKey = new SymmetricSecurityKey(key),
            ValidateIssuer = true,
            ValidIssuer = "sample",
            ValidateAudience = true,
            ValidAudience = "sample",
            ValidateLifetime = true,
            ClockSkew = TimeSpan.Zero // 关闭时钟偏移容忍,严格验证过期时间
        }, out SecurityToken validatedToken);
        
        return true;
    }
    catch
    {
        // 验证失败,可捕获具体异常定位原因
        return false;
    }
}

3. 精准排查验证失败原因

捕获具体异常类型,快速定位问题:

try
{
    // 调用上述ValidateJwtToken方法
}
catch (SecurityTokenSignatureKeyNotFoundException ex)
{
    Console.WriteLine("签名密钥不匹配:" + ex.Message);
}
catch (SecurityTokenExpiredException ex)
{
    Console.WriteLine("Token已过期:" + ex.Message);
}
catch (SecurityTokenInvalidIssuerException ex)
{
    Console.WriteLine("Issuer不匹配:" + ex.Message);
}
catch (SecurityTokenInvalidAudienceException ex)
{
    Console.WriteLine("Audience不匹配:" + ex.Message);
}
catch (Exception ex)
{
    Console.WriteLine("验证失败:" + ex.Message);
}

内容的提问来源于stack exchange,提问作者Android Guy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 18:07:05