.NET Core 8 Azure AD令牌验证报「签名无效」问题求助
.NET 8升级后JWT令牌签名验证失败问题修复
问题原因
.NET 8中Microsoft Identity Web对JWT令牌的签名验证逻辑做了严格优化,你的配置存在参数冲突:设置了ValidateIssuerSigningKey = true(要求验证签名密钥),同时自定义SignatureValidator直接返回令牌(跳过实际签名校验),再搭配RequireSignedTokens = false(允许无签名令牌),这种混合配置在.NET 7中能兼容,但.NET 8触发了严格校验逻辑,导致签名无效错误。
解决方案
方案1:不需要验证令牌签名(仅测试/非生产环境)
调整参数,明确关闭签名验证:
services .AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApi(options => { options.IncludeErrorDetails = true; options.TokenValidationParameters = new TokenValidationParameters { ValidIssuer = $"https://sts.windows.net/{configuration["AD:TenantId"]}/", ValidateIssuer = true, ValidAudience = "00000003-0000-0000-c000-000000000000", ValidateAudience = true, // 可移除自定义签名验证器,关闭签名校验后无需该逻辑 // SignatureValidator = delegate (string token, TokenValidationParameters parameters) { return new JwtSecurityToken(token); }, ValidateIssuerSigningKey = false, // 改为false,关闭签名密钥验证 RequireSignedTokens = false, ClockSkew = TimeSpan.Zero }; }, options => configuration.Bind("AD", options));
方案2:启用签名验证(生产环境推荐)
遵循安全最佳实践,让Microsoft Identity Web自动从Azure AD元数据获取公钥验证签名:
services .AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApi(options => { options.IncludeErrorDetails = true; options.TokenValidationParameters = new TokenValidationParameters { ValidIssuer = $"https://sts.windows.net/{configuration["AD:TenantId"]}/", ValidateIssuer = true, ValidAudience = "00000003-0000-0000-c000-000000000000", ValidateAudience = true, // 移除自定义签名验证器,交由框架自动处理签名校验 ValidateIssuerSigningKey = true, // 默认值,可省略 // RequireSignedTokens = true, // 默认值,可省略 ClockSkew = TimeSpan.Zero }; }, options => configuration.Bind("AD", options));
内容的提问来源于stack exchange,提问作者derodevil
相关产品推荐
相关产品推荐

