如何解决SecurityTokenSignatureKeyNotFoundException: IDX10503签名验证失败问题
解决Azure AD对接ASP.NET Core MVC时的IDX10503签名验证错误
出现SecurityTokenSignatureKeyNotFoundException: IDX10503: Signature validation failed错误,核心原因是应用无法找到与token的kid匹配的签名密钥,以下是针对性的解决步骤:
1. 严格核对appsettings.json中的Azure AD配置
确保配置参数与Azure AD门户中应用注册的信息完全一致,示例配置如下:
"AzureAd": { "Instance": "https://login.microsoftonline.com/", "Domain": "your-domain.onmicrosoft.com", "TenantId": "你的租户ID", "ClientId": "你的应用客户端ID", "CallbackPath": "/signin-oidc" }
- 重点确认
TenantId:不要误填为common(除非是多租户应用),必须是Azure AD门户中显示的租户ID - 若使用CIAM租户,需确保
Domain和TenantId对应CIAM租户的信息
2. 检查Azure AD应用注册的密钥/证书配置
- 如果应用使用证书验证:确认证书已正确上传至Azure AD应用注册的“证书和密码”页面,且本地应用进程有权限访问证书的私钥
- 如果使用客户端密钥:确认密钥未过期,且在appsettings.json中添加了正确的
ClientSecret字段(若需要)
3. 清理缓存并强制刷新配置
开发环境中,旧的配置缓存可能导致密钥不匹配:
- 删除项目的
bin和obj目录,重新生成项目 - 可在代码中缩短配置刷新间隔(仅开发环境使用):
builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApp(options => { builder.Configuration.Bind("AzureAd", options); options.ConfigurationManager.RefreshInterval = TimeSpan.FromMinutes(1); });
4. 验证Token的受众与颁发者
通过已启用的PII日志查看Token内容:
- 确认
aud(受众)字段值等于应用的ClientId - 确认
iss(颁发者)字段值与配置中的Instance + TenantId一致(例如https://login.microsoftonline.com/你的租户ID/v2.0) - 若受众不匹配,需在Azure AD应用注册的“公开API”页面添加正确的受众
5. 指定正确的Azure AD终结点版本
如果是基于v2.0协议的应用(如CIAM场景),需在配置中明确指定权威终结点:
在appsettings.json的AzureAd节点添加:
"Authority": "https://login.microsoftonline.com/{你的租户ID}/v2.0"
内容的提问来源于stack exchange,提问作者Skye MacMaster
相关产品推荐
相关产品推荐

