В настоящее время я аутентифицирую пользователей от некоторых AD, используя следующий код:
DirectoryEntry entry = new DirectoryEntry(_path, username, pwd);
try
{
// Bind to the native AdsObject to force authentication.
Object obj = entry.NativeObject;
DirectorySearcher search = new DirectorySearcher(entry) { Filter = "(sAMAccountName=" + username + ")" };
search.PropertiesToLoad.Add("cn");
SearchResult result = search.FindOne();
if (result == null)
{
return false;
}
// Update the new path to the user in the directory
_path = result.Path;
_filterAttribute = (String)result.Properties["cn"][0];
}
catch (Exception ex)
{
throw new Exception("Error authenticating user. " + ex.Message);
}
Это отлично работает для проверки пароля с именем пользователя.
Проблема заключается в том, что общие ошибки всегда возвращаются "Ошибка входа в систему: неизвестное имя пользователя или неверный пароль". когда аутентификация завершается с ошибкой.
Однако аутентификация может также завершиться неудачей, если учетная запись заблокирована.
Как я узнаю, если он не работает из-за его блокировки?
Я столкнулся с статьями, которые вы можете использовать:
Convert.ToBoolean(entry.InvokeGet("IsAccountLocked"))
или выполните что-то вроде объяснения здесь
Проблема заключается в том, что всякий раз, когда вы пытаетесь получить доступ к любому свойству в DirectoryEntry, выдается такая же ошибка.
Любое другое предположение о том, как добраться до фактической причины неудачи аутентификации? (заблокирована учетная запись/пароль/и т.д.)
AD, к которому я подключаюсь, не обязательно должен быть сервером Windows.