Identity Server 4 не будет использовать пользовательский обработчик аутентификации - PullRequest
0 голосов
/ 13 февраля 2020

У меня есть работающий AuthenticationHandler <> для MVC Core, и он прекрасно работает. Теперь я хочу повторно использовать все это для Identity Server 4, но фреймворк, кажется, работает против меня.

Я добавил

builder.Services.AddAuthentication().AddScheme<MyWebsiteOptions, MyWebsiteAuthenticationHandler<TIdentity, MyWebsiteUser>>(CredentialStoreConstants.SCHEMA_NAME, x => { x.ConnectionString = options.ConnectionString; });

И как я сказал, что это работает на 100% для MVC Core-части. Теперь я не могу получить к нему доступ к конечным точкам IdentityServer4, например /connect/authorize/callback. Я уже перечитал документацию по Identity Server 4 снова и снова, но почему-то мне здесь не хватает какой-то ключевой вещи.

У кого-нибудь есть идея? Я уверен, что я не первый, кто столкнется с этим.

Ответы [ 2 ]

2 голосов
/ 13 февраля 2020

Конечные точки Identityserver - это просто простые конечные точки, реализованные в качестве промежуточного программного обеспечения для вашего конвейера.

Соответствующие файлы на Identityserver4:

Это означает, что их не хватает MVC, поэтому вы не можете использовать с ними AuthenticationHandler

СОВЕТ: Если вы прочитали всю документацию и Ответа нет, самое время погрузиться в код: https://github.com/IdentityServer/IdentityServer4

1 голос
/ 13 февраля 2020

Ответ. Это было более очевидно, чем я себе представлял.

Для стандарта. NET Базовая аутентификация, успешный проход на AuthenticationHandler<> недостаточно

Если у вас есть пользовательский тип пользователя и пользовательский поток входа в систему, вам также нужно сделать что-то подобное после того, как вы успешно проверили учетные данные указанного пользовательского типа пользователя.

В какой-то момент вам нужно извлечь соответствующего пользователя из базы данных и в остальные MVC Основной процесс аутентификации.

Итак, после чего-то вроде AuthenticationHandler<>().Succeeded == true вам нужно сделать следующее:

 var systemUser = await _userResolver.GetUserAsync(user.Email);
 await _signInManager.SignInAsync(systemUser, true);

Последняя строка является наиболее важной, поскольку она инициализирует правильный MVC Основной пользовательский сеанс

...