C # Проверка пользователя на сервере MS Active Directory с помощью System.DirectoryServices.Protocols

Я хочу аутентифицировать пользователя на сервере MS Active Directory.

Поскольку для этого доступны два пространства имен, я хочу использовать System.DirectoryServices.Protocols.

В настоящее время я подтверждаю пользователя, используя следующий код

var valid = false;

var credentials = new NetworkCredential("user01", "password01");
var serverId = new LdapDirectoryIdentifier("192.168.1.21:389");

var conn = new LdapConnection(serverId, credentials);

try
{
    conn.Bind();
    valid = true;
}
catch
{
}

Приведенный выше код правильно проверяет пользователя, но он также проверяет старый пароль.

Как мне от этого избавиться?

Я проверил следующие вопросы

Проверить имя пользователя и пароль в Active Directory?

Почему Active Directory проверяет последний пароль?


person Vimesh Shah    schedule 10.12.2019    source источник


Ответы (1)


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

var conn = new LdapConnection(serverId, credentials, AuthType.Kerberos);

Я видел ваш комментарий к этому ответу, в котором говорилось, что при этом вся аутентификация не выполняется, даже с правильным паролем. Это просто означает, что проверка подлинности Kerberos не работает. Это совершенно другая путаница с устранением неполадок. Если сервер, на котором вы его запускаете, присоединен к тому же (или доверенному) домену, что и пользователь, которого вы аутентифицируете, то действительно нет причин, по которым Kerberos не должен работать. Но если сервер находится за пределами домена, настройка Kerberos может вызвать затруднения.

Вот что по этому поводу:

Или вы можете просто проигнорировать это и позволить ему использовать NTLM. В любом случае он позволяет использовать старый пароль только в течение 1 часа после изменения.

person Gabriel Luci    schedule 10.12.2019