问题描述
- 我们已在-AKS aks版本1.16.9上部署了我们的服务。
- 我们的服务是使用包装器库开发的,用于对令牌进行身份验证,而内部使用Microsoft.Identity.Model.Token来验证令牌。在大多数情况下,它都可以正常工作。已将其配置为接受azure adb2c令牌以及azure广告客户端凭据令牌。
- 偶尔(每两个月一次)仅在使用azure adb2b客户端凭据令牌时才会收到SecurityTokenSignatureKeyNotFoundException-错误。使用azure ad b2c令牌,同一库可以很好地工作。组件中的示例代码段
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。重新创建广告连播后,异常消失
使用的组件(“ Microsoft.IdentityModel.Tokens =版本= 5.5.0,Microsoft.IdentityMode 7.0.0,Microsoft.AspNetCore.Authentication.JwtBearer版本= 3.1.3)
解决方法
我们手动处理元数据端点,不知道如何刷新滚动键。 看起来这个简单的代码片段可以开箱即用。
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.Authority = "Authority Details";
options.Audience = "Audience";
options.MetadataAddress = "metadataendpotint";
});
'''