IdentityServer4 с аутентификацией LDAP / AD без пользовательского интерфейса - PullRequest
0 голосов
/ 07 сентября 2018

В настоящее время я работаю над проектом, в котором я пытаюсь настроить службу на основе IdentityServer4 (https://github.com/IdentityServer/IdentityServer4)), которая проверяет подлинность пользователей путем запроса локального Active Directory через LDAP.

Для этого я также включил IdentityServer4.LdapExtension (https://github.com/Nordes/IdentityServer4.LdapExtension) в свой проект. Рабочий пример из хранилища работает нормально (https://github.com/Nordes/IdentityServer4.LdapExtension/tree/master/Sample/IdentityServer) - но пользовательская логика является частью пользовательского интерфейса) и мне нужен мой сервис для работы без интерфейса.

Простое добавление

.AddLdapUsers<ActiveDirectoryAppUser>(Conf.GetSection("ldap"), UserStore.InMemory) 

, как описано в документации, не меняет конвейер запросов, поскольку предоставленные методы входа в систему / проверки никогда не выполняются - они запускаются только при вызовах из пользовательского интерфейса (AccountController). Однако, как я уже сказал, я не хочу интегрировать какой-либо пользовательский интерфейс в эту службу и скорее использовать интерфейс, который уже предоставляет Token-Endpoint (POST-запрос с client_id и client_secret, ответ с JWT).

Есть ли способ интегрировать аутентификацию LDAP, не переписывая большие части, которые работают по умолчанию, как нужно?

1 Ответ

0 голосов
/ 07 сентября 2018

Судя по вашему вопросу, у вас уже есть username и password. Примечание client_id! = username и client_secret! = password. client_id - это идентификатор клиентского приложения.

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

Код, который вы хотите выполнить для аутентификации пользователя, находится в LdapUserResourceOwnerPasswordValidator.cs и должен выполняться, если вы передаете правильные параметры конечной точке токена:

POST / connect / token

client_id=yourclientid&
client_secret=yourclientsecret&
grant_type=password&
username=yourusername&password=yourusernamespassword

См. Документацию по конечной точке токена: https://identityserver4.readthedocs.io/en/release/endpoints/token.html

Вы можете использовать Идентификационную модель , чтобы помочь вам сделать запрос токена:

var response = await client.RequestPasswordTokenAsync(new PasswordTokenRequest
{
    Address = "https://demo.identityserver.io/connect/token",

    ClientId = "yourclientid",
    ClientSecret = "yourclientsecret",
    UserName = "yourusername",
    Password = "yourusernamespassword"
});

Это задокументировано здесь https://identitymodel.readthedocs.io/en/latest/client/token.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...