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

.NET/C#中JWT签名验证失败:Token含KID但与配置不匹配

.NET/C# JWT验证报错IDX10503:签名验证失败

IDX10503: Signature validation failed. Token does not have a kid. Keys tried: 'Microsoft.IdentityModel.Tokens.X509SecurityKey, KeyId: 'T1St-dLTvyWRgxB_676u8krXS-I', InternalId: 'T1St-dLTvyWRgxB_676u8krXS-I'. , KeyId: T1St-dLTvyWRgxB_676u8krXS-I
'. Number of keys in TokenValidationParameters: '1'.
Number of keys in Configuration: '0'.

验证功能的核心代码如下:

string stsDiscoveryEndpoint = "https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration";
ConfigurationManager<OpenIdConnectConfiguration> configManager = new ConfigurationManager<OpenIdConnectConfiguration>(stsDiscoveryEndpoint, new OpenIdConnectConfigurationRetriever());
OpenIdConnectConfiguration config = configManager.GetConfigurationAsync().Result;

TokenValidationParameters validationParameters = new TokenValidationParameters
{
    ValidAudience = "XXX",
    ValidIssuer = "XXX",
    ValidateAudience = true,
    ValidateIssuer = true,
    IssuerSigningKey = config.SigningKeys.FirstOrDefault(),
    ValidateLifetime = true
};

JwtSecurityTokenHandler tokendHandler = new JwtSecurityTokenHandler();
SecurityToken jwt;
tokendHandler.ValidateToken(token, validationParameters, out jwt);

解码待验证的Access Token后,发现其头部包含KID,但与配置中获取到的KID不一致:

{
    "typ": "JWT",
    "alg": "RS256",
    "kid": "5B3nRxtQ7ji8eNDc3Fy05Kf97ZE"
}

相关疑问:

  • 该问题是否与内存中缓存的旧签名密钥(比如昨日的)不同步有关?
  • 如果是缓存问题,如何清除配置中的签名密钥缓存?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 12:58:28