ASP.Net Core集成Azure AD部署后报IDX10511签名验证失败错误
ASP.NET Core集成Azure AD触发IDX10511签名验证报错解决方案
完整报错如下:
SecurityTokenInvalidSignatureException: IDX10511: Signature validation failed. Keys tried: 'System.Text.StringBuilder'. kid: 'System.String'. Exceptions caught: 'System.Text.StringBuilder'. token: 'System.IdentityModel.Tokens.Jwt.JwtSecurityToken'. System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.ValidateSignature(string token, TokenValidationParameters validationParameters) Exception: An error was encountered while handling the remote login. Microsoft.AspNetCore.Authentication.RemoteAuthenticationHandler.HandleRequestAsync()
排查解决步骤
- 同步配套身份配置:仅修改Client ID是不够的,开发服务器对应应用注册的
TenantId(租户ID)、Instance(实例地址)需要和本地配置区分开,确保Authority字段取值为https://login.microsoftonline.com/服务器端租户ID(用v2端点则后缀加/v2.0),和服务器端应用注册的所属租户、令牌版本完全匹配。 - 检查签名密钥拉取逻辑:不要在
TokenValidationParameters中硬编码IssuerSigningKey、IssuerSigningKeys参数覆盖默认逻辑,让中间件自动从Azure AD公开元数据拉取对应签名公钥。如果存在公钥缓存不更新的问题,可调整元数据刷新间隔,参考配置代码:
builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApp(options => { options.Instance = "https://login.microsoftonline.com/"; options.TenantId = "你的开发服务器应用注册所属租户ID"; options.ClientId = "你的开发服务器应用注册Client ID"; // 调整元数据刷新间隔,避免缓存旧密钥 options.ConfigurationManager = new ConfigurationManager<OpenIdConnectConfiguration>( $"{options.Instance}{options.TenantId}/v2.0/.well-known/openid-configuration", new OpenIdConnectConfigurationRetriever(), new HttpDocumentRetriever()) { AutomaticRefreshInterval = TimeSpan.FromMinutes(5), RefreshInterval = TimeSpan.FromSeconds(30) }; });
- 核对应用注册令牌版本:进入Azure门户查看开发服务器应用注册的清单,确认
accessTokenAcceptedVersion取值和Authority的端点版本匹配:取值为2则用带/v2.0后缀的Authority地址,取值为1则不加后缀。 - 排查网络链路篡改问题:确认开发服务器的反向代理、WAF、防火墙等组件没有篡改Azure AD返回的JWT令牌内容,也没有拦截元数据公钥拉取请求。
- 开启详细日志定位:在开发服务器环境开启
Microsoft.IdentityModel命名空间的Debug级日志,可输出完整的kid(密钥ID)、尝试过的签名密钥列表,快速定位是公钥拉取失败还是密钥不匹配问题。
内容的提问来源于stack exchange,提问作者danilo garduce
相关产品推荐
相关产品推荐

