Bezdepbonusu7Программирование: статьи и ответы

Вопрос

IdentityServer и устаревшее хранилище пользователей SQL Server

Автор вопроса: Fred MériotОтветов: 1

Несколько недель назад я обнаружил OpenID Connect и IdentityServer V3. Я запустил некоторые из предоставленных примеров, и сегодня я нахожусь в том месте, где мне нужно идти дальше, но я не знаю, как это сделать:

На самом деле у нас есть "самодельный" процесс аутентификации и авторизации, и мы хотели бы перейти на решение OpenID Connect. Identity Server кажется идеальным кандидатом для этого.

Сегодня наши пользователи хранятся в базе данных SQL Server, и в идеале я хотел бы "подключить" эту таблицу к Identity Server (не касаясь схемы этой таблицы). Я читал о "MembershipReboot", но он использует свою собственную базу данных. Я также слышал о создании собственной пользовательской службы, но в образце (CustomUserService) я не нашел ничего полезного. Сегодня я немного растерялся, потому что не знаю, куда идти, и понимаю, что не очень далеко от цели.

мне нужна помощь

Спасибо

sql-serveridentityserver3

Ответы

Ответ 1 · рейтинг 1 · explunit

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

В примере LocalRegistrationUserService вы найти такие строки:

    public override Task AuthenticateLocalAsync(LocalAuthenticationContext context)
    {
        var user = Users.SingleOrDefault(x => x.Username == context.UserName && x.Password == context.Password);
/// snip ...

и эти:

   public override Task GetProfileDataAsync(ProfileDataRequestContext context)
    {
        // issue the claims for the user
        var user = Users.SingleOrDefault(x => x.Subject == context.Subject.GetSubjectId());
/// snip...

Вам нужно заменить те вызовы, которые ищут значения из коллекции Users в памяти, чем-то, что открывает соединение с SQL-сервером и вместо этого ищет их там.

Дополнительные поддерживаемые методы см. в Custom User Service, но эти два ( AuthenticateLocalAsync, GetProfileDataAsync) плюс поиск SQL - это все, что вам нужно для начала работы.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы