#adal #claims-based-identity
#adal #идентификация на основе утверждений
Вопрос:
- Мы развернули наши службы на платформе AKS версии 1.16.9.
- Наши службы были разработаны с использованием библиотеки-оболочки для аутентификации токена, который внутренне использует Microsoft.Идентификация.Модель.Токен для проверки токена. В большинстве сценариев это работает отлично. Он был настроен для приема токенов Azure adb2c, а также токенов учетных данных клиента Azure ad.
- Время от времени (иногда раз в два месяца) мы получаем исключение SecurityTokenSignatureKeyNotFoundException- ошибка только при использовании токена учетных данных клиента Azure adb2b. Та же библиотека отлично работает с использованием токенов 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().Resu<
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);
});
Сведения об исключении:
«Майкрософт.AspNetCore.Аутентификация.JwtBearer.JwtBearerHandler [1] Не удалось проверить токен. Майкрософт.Модель идентификации.Жетоны.Исключение SecurityTokenSignatureKeyNotFoundException: IDX10501: Ошибка проверки подписи. Невозможно сопоставить ключ: » kid: ‘ Пойманы исключения:
Пожалуйста, обратите внимание, что пойманное исключение является пустым. Мы проверили соответствие дочернего элемента токена и конечной точки метаданных Azure Ad B2B. После получения ошибки мы постоянно получаем ошибку до перезапуска модуля. Как только мы воссоздаем модуль, исключение исчезает
Используемые компоненты ( «Майкрософт.Модель идентификации.Токены = Версия = 5.5.0, Microsoft.Режим идентификации 7.0.0, Microsoft.AspNetCore.Аутентификация.Версия JwtBearer=3.1.3)
Комментарии:
1. Похоже, у вас есть решение в GitHub
Ответ №1:
Мы обрабатывали конечную точку метаданных вручную и не знали, как обновить переходящие ключи. Похоже, что этот простой фрагмент кода может сделать трюк из коробки.
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.Authority = "Authority Details";
options.Audience = "Audience";
options.MetadataAddress = "metadataendpotint";
});
»’