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

.NET 7升级到.NET 9后JWT验证失败(IDX14100)求助

.NET 9升级后JWT认证失败(IDX14100错误)的排查与解决方案

问题背景

升级到.NET 9后,JWT令牌被判定为无效,API持续返回401 - Unauthorized,错误信息如下:

IDX14100: JWT is not well formed, there are no dots (.).The token needs to be in JWS or JWE Compact Serialization Format.(JWS): 'EncodedHeader.EndcodedPayload.EncodedSignature'.(JWE): 'EncodedProtectedHeader.EncodedEncryptedKey.EncodedInitializationVector.EncodedCiphertext.EncodedAuthenticationTag'.

该问题仅在.NET 9环境出现,.NET 7下完全正常。

类似问题反馈

不少开发者在.NET 8/.NET 9升级过程中遇到过相同的JWT格式校验错误,核心原因是框架对JWT格式的校验逻辑变得更严格。

可能影响的.NET 9变更

  • Microsoft.IdentityModel.Tokens库校验增强:.NET 9绑定的该库版本对JWT紧凑格式的校验更严格,之前.NET 7中允许的一些微小格式瑕疵(不影响解析的情况)现在会被直接判定为无效。
  • JwtBearer中间件行为调整:.NET 9中JwtBearer认证中间件对Authorization头的解析逻辑优化,对令牌的格式完整性要求更高,不再容忍令牌中的额外转义字符、截断或无效空格。

排查与解决步骤

  1. 验证令牌格式完整性
    提取请求中实际传递的JWT令牌,检查是否严格遵循Header.Payload.Signature(JWS)或JWE的5段式格式,确认令牌没有被URL编码错误、前端存储时的转义(如多余引号)或传输过程中截断。

  2. 对比认证配置差异
    检查.NET 7与.NET 9项目中的AddJwtBearer配置,确认是否存在.NET 9新增的校验选项,必要时显式配置兼容逻辑:

    builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
        .AddJwtBearer(options =>
        {
            options.TokenValidationParameters = new TokenValidationParameters
            {
                ValidateIssuer = true,
                ValidateAudience = true,
                ValidateLifetime = true,
                ValidateIssuerSigningKey = true,
                ValidIssuer = "your-issuer",
                ValidAudience = "your-audience",
                IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your-secret-key"))
            };
        });
    
  3. 检查令牌生成逻辑
    确认后端生成JWT的代码在.NET 9环境下是否输出了正确格式的令牌,排查是否因依赖库升级导致生成的令牌编码方式或结构发生变化。

  4. 排查前端令牌传递逻辑
    验证前端在设置Authorization头时是否严格遵循Bearer <token>格式,避免在令牌前后添加多余的空格、引号或其他无效字符。

内容的提问来源于stack exchange,提问作者vijay sahu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 01:36:09