IdentityServer4: каков идиоматический способ интеграции пользовательского источника для аутентификации и получения профиля?

Допустим, мне нужно интегрироваться с устаревшей корпоративной системой, которая обслуживает пользователей. Предположим, что эта корпоративная система предоставляет C# SDK двумя способами:

  1. Аутентификация: sdk.Authenticate("Region", "Username", "Password") Обратите внимание, что Region — это дополнительный параметр, выбираемый пользователем при входе в систему. Поэтому мне нужно иметь возможность читать этот настраиваемый параметр в дополнение к учетным данным пользователя. (Да, вход в систему будет интерактивным).

  2. Получение профиля: sdk.GetProfile(UserId)

Я хочу использовать IdentityServer для создания токенов обычным способом, но использовать эти два метода для реализации пользовательской аутентификации и извлечения профиля.

Я вижу, что, расширив IProfileService, я смогу интегрировать поиск профилей и заполнение пользовательских утверждений. Однако я вижу в документах следующие несколько точек расширения, но не уверен, что это лучший способ;

  1. Метод Account Controller пользовательского интерфейса быстрого запуска: я должен разместить здесь логику Login(LoginInputModel model, string button) и просто вызвать _signInManager.SignInAsync для входа пользователя. Но мне не кажется, что я напрямую расширяю IdentityServer4, чтобы добавить поддержку другого пользовательского поставщика аутентификации.

  2. IExtensionGrantValidator: Этот ответ и Документы IdentityServer объясняют способ создания пользовательского гранта, который я должен использовать для вызова sdk.Authenticate("Region", "Username", "Password"). Но это означало бы, что я буду использовать настраиваемый тип гранта. Мне нужно иметь возможность поддерживать существующие типы грантов, такие как Hybrid. Я вижу поддержку пользовательских параметров через параметр sdk.Authenticate("Region", "Username", "Password") в методе context

  3. IResourceOwnerPasswordValidator: Этот документ IdentityServer объясняет, как реализовать собственный валидатор пароля для потока владельца ресурса. Но мне нужно иметь возможность поддерживать существующие типы грантов, такие как Hybrid. Я вижу поддержку пользовательских параметров через параметр ValidateAsync(ExtensionGrantValidationContext context) в методе context

  4. Внешние аутентификаторы: Этот документ IdentityServer объясняет, как добавлять внешние аутентификаторы. Но я не вижу метода ValidateAsync(ResourceOwnerPasswordValidationContext context) для нестандартных аутентификаторов. Я вижу поддержку только популярных аутентификаторов, таких как Google.

Что мне не хватает?

Вам нужна некоторая пользовательская страница входа для поддержки вашего дополнительного параметра, поэтому ваш выбор в любом случае 1. Опция 4 предназначена для перенаправления на внешнюю страницу входа, когда у вас есть только API. Варианты 2 и 3 не интерактивны, поэтому ваши требования оставили вам только один вариант, и я не вижу в этом проблемы :)

d_f 28.05.2019 11:37

@d_f прав, вариант 1, скорее всего, то, что вы ищете здесь.

Vidmantas Blazevicius 28.05.2019 12:24
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
212
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я выбрал первый вариант, упомянутый в вопросе: метод Quick Start UI Account ControllerLogin(LoginInputModel model, string button).

Другие вопросы по теме