【问题标题】:Intermittently getting .”SecurityTokenSignatureKeyNotFoundException: IDX10501: Signature validation failed”间歇性地得到“SecurityTokenSignatureKeyNotFoundException:IDX10501:签名验证失败”
【发布时间】:2020-12-15 09:14:23
【问题描述】:
  1. 我们已在 AKS aks 版本 1.16.9 上部署我们的服务。
  2. 我们的服务是使用包装库开发的,用于验证令牌,内部使用 Microsoft.Identity.Model.Token 来验证令牌。在大多数情况下,它工作得非常好。它已配置为接受 azure adb2c 令牌以及 azure 广告客户端凭据令牌。
  3. 仅当我们使用 azure adb2b 客户端凭据令牌时,有时(有时两个月一次)才会收到 SecurityTokenSignatureKeyNotFoundException- 错误。使用 azure ad b2c 令牌,相同的库可以正常工作。来自组件的示例 sn-p
 static Microsoft.IdentityModel.Tokens.TokenValidationParameters TokenValidationParameters(AppConfig appConfig)
    {
        var audiences = new List<string> {'audience1', 'audience2'};
        var issuers = new List<string> {'b2c', 'ad', 'auth0', 'identityserver'};
        var discoveryendpoints = new List<string> {'b2c meta url', 'ad meta url', 'auth0 meta url', 'identityserver meta url'};
        Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectConfiguration openIdSigningConfigs = new Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectConfiguration();
        foreach (var discoveryendpoint in discoveryendpoints)
        {
            Microsoft.IdentityModel.Protocols.ConfigurationManager<Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectConfiguration> configManager = new Microsoft.IdentityModel.Protocols.ConfigurationManager<Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectConfiguration>(discoveryendpoint, new Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectConfigurationRetriever());
            Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectConfiguration config = configManager.GetConfigurationAsync().Result;
            foreach (var item in config.SigningKeys)
            {
                openIdSigningConfigs.SigningKeys.Add(item);
            }
        }
        var tvps = new Microsoft.IdentityModel.Tokens.TokenValidationParameters
        {
            ValidateAudience = true,
            ValidateIssuer = true,
            ValidateLifetime = true,
            ValidAudiences = audiences,
            ValidIssuers = issuers,
            IssuerSigningKeys = openIdSigningConfigs.SigningKeys
        };
        return tvps;
    }

services.AddAuthentication(Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerDefaults.AuthenticationScheme) 
        .AddJwtBearer( 
                options => 
        { 
                options.TokenValidationParameters = TokenValidationParameters(tokenconfig); 
        });

 

异常详情:

"Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler[1] 无法验证令牌。 Microsoft.IdentityModel.Tokens.SecurityTokenSignatureKeyNotFoundException:IDX10501:签名 验证失败。无法匹配键:” 孩子: '' 捕获的异常:

请注意捕获的异常是空的。我们已经检查了令牌的孩子和 Azure Ad B2B 元数据终结点是否匹配。 收到错误后,我们会不断收到错误,直到 Pod 重新启动。一旦我们重新创建 pod,异常就会消失

使用的组件(“Microsoft.IdentityModel.Tokens = Version= 5.5.0, Microsoft.IdentityMode 7.0.0,Microsoft.AspNetCore.Authentication.JwtBearer Version=3.1.3)

【问题讨论】:

  • 看起来你在GitHub得到了解决方案

标签: adal claims-based-identity


【解决方案1】:

我们手动处理元数据端点,不知道如何刷新滚动键。 看起来这个简单的代码 sn-p 可以开箱即用。

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)

    .AddJwtBearer(options =>
    {
            options.Authority = "Authority Details";
            options.Audience = "Audience";
            options.MetadataAddress = "metadataendpotint";
    });

'''

【讨论】:

    猜你喜欢
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 2020-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-11
    相关资源
    最近更新 更多