【发布时间】:2020-12-15 09:14:23
【问题描述】:
- 我们已在 AKS aks 版本 1.16.9 上部署我们的服务。
- 我们的服务是使用包装库开发的,用于验证令牌,内部使用 Microsoft.Identity.Model.Token 来验证令牌。在大多数情况下,它工作得非常好。它已配置为接受 azure adb2c 令牌以及 azure 广告客户端凭据令牌。
- 仅当我们使用 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