Получение ошибки проверки подписи ошибка при добавлении аутентификации на предъявителя в webapi для проверки маркера службы, сгенерированного клиентом
У меня было требование использовать Ad authentication для веб-api, которое я имплиментировал с помощью "WindowsAzureActiveDirectoryBearerauthenticationoptions", но я получаю ниже ошибку при ValidateToken, когда я сталкиваюсь с клиентом
IDX10500: ошибка проверки подписи. Не удается разрешить идентификатор securitykeyidentifier: 'идентификатор securitykeyidentifier
(
IsReadOnly = False,
Количество = 2,
Пункт[0] = X509ThumbprintKeyIdentifierClause(хэш = 0x8818CBD5172ACE18B2E1FA71231759aa884cd989),
Пункт[1] = Система.IdentityModel.Жетоны.NamedKeySecurityKeyIdentifierClause
)
',
знак: {-------------------}
Что я уже пробовал:
Ниже приведен мой стартовый файл
конфигурация public void(приложение IAppBuilder)
{
HttpConfiguration config = новая HttpConfiguration();
ConfigureAuth(приложение);
WebApiConfig.Зарегистрироваться(настройка);
app.UseCors(CorsOptions.AllowAll);
апп.UseWebApi(настройка);
}
private void ConfigureAuth(приложение IAppBuilder)
{
ВАР _x509DataProtector = GetX509Certificate(диспетчер конфигураций.AppSettings["CertificateThumbPrint"]);
приложение.UseWindowsAzureActiveDirectoryBearerauthentication(
новые WindowsAzureActiveDirectoryBearerauthenticationoptions
{
TokenValidationParameters = новая система.IdentityModel.Жетоны.TokenValidationParameters
{
ValidIssuers = Диспетчер Конфигураций.AppSettings["Аудитория"].Расщеплять(','),
ValidateIssuer = истина,
SaveSigninToken = false,
IssuerSigningKey = X509AsymmetricSecurityKey(_x509DataProtector),
},
Tenant = ConfigurationManager.AppSettings["Арендатор"],
Provider= новый OAuthBearerProvider()
});
}
Ниже приведен класс, в котором я хочу проверить токен
публичный класс OAuthBearerProvider : OAuthBearerAuthenticationProvider
{
общественного переопределить задачу маркер requesttoken(OAuthRequestTokenContext контексте)
{
пробовать
{
var tokenHandler = новый JwtSecurityTokenHandler();
Securitytoken, в securitytoken, в;
ВАР _x509DataProtector = GetX509Certificate(диспетчер конфигураций.AppSettings["CertificateThumbPrint"]);
var validationParameters = новые TokenValidationParameters()
{
ValidateAudience = истина,
ValidAudiences = Диспетчер Конфигураций.AppSettings["Аудитория"].Расщеплять(','),
IssuerSigningKey = новый X509SecurityKey(_x509DataProtector),
};
var auth = контекст.OwinContext.Request.Заголовки["Авторизация"];
если (!строка.IsNullOrWhiteSpace(auth) && auth.Содержит("Предъявитель"))
{
var token = auth.Split(' ')[1];
var pr = tokenHandler.CanValidateToken;
//Я получаю вышеуказанную ошибку в этой строке
ВАР основные = tokenHandler.ValidateToken(токен, validationParameters, out securityToken);
контексте.Запрос.Пользователь = Принципал;
}
}
поймать (исключение бывший)
{
сообщение ВАР = ех.Сообщение;
return Task.FromResult<object>(контекст);
}
return Task.FromResult<object>(контекст);
}
public override Task ValidateIdentity(контекст OAuthValidateIdentityContext)
{
return Task.FromResult<object>(контекст);
}
}
Я сослался на какой-то учебник относительно асимметричного RSA256 , где открытый ключ используется для передачи для IssuerSigningToken, здесь я могу asumme открытый ключ в качестве идентификатора приложения клиента, если это правда, как я могу назначить его IssuerSigningToken или IssuerSigningKey в TokenValidationParameters.
Nathan Minier
Существует потенциально миллион отдельных ловушек, которые могут повлиять на вашу службу, многие из них на уровне Ops/SA.
Используете ли вы в настоящее время PKI для аутентификации в корпоративной среде? Если да, то настроен ли он на аутентификацию только с помощью сертификатов или у вас есть опция PW?
Есть ли у вас рабочий процесс на уровне предприятия для создания и распространения пар сертификатов? Сертификат, который вы пытаетесь использовать, пришел из этих каналов или это часть испытательной установки?