Как проверить, существует ли пользователь LDAP / активен? - PullRequest
2 голосов
/ 08 марта 2012

Я использую приложение C # для аутентификации и проверки пользователя Active Directory, который находится на 64-битном сервере Windows 2008.

Мне удалось успешно аутентифицировать пользователя при вводе имени пользователя и пароля с использованием следующего кода: Мое значение domainName - rootforest.com, а мое userName - admin6

        UserPrincipal usr;
        PrincipalContext ad;

        //Enter Active Directory settings
        ad = new PrincipalContext(ContextType.Domain, domainName,usrName,pswd);

        //search user
        usr = new UserPrincipal(ad);
        usr.SamAccountName = usrName;

        PrincipalSearcher search = new PrincipalSearcher(usr);
        usr = (UserPrincipal)search.FindOne();
        search.Dispose();

В другой функции, где я хочу проверить, существует ли пользователь 'admin6' и у меня нет пароля, но когда я проверяю его, функция выдает «Ошибка входа в систему: неизвестное имя пользователя или неверный пароль. \ R \ n ». Код, который я использовал, был практически идентичен приведенному выше, за исключением этой строки:

        //Enter Active Directory settings
        ad = new PrincipalContext(ContextType.Domain, domainName);

Имея это не работает, я пробовал другой код, который я нашел в Интернете, но все они дают мне ту же ошибку. Я начал думать, что это может быть, как я настраивал свой домен Active Directory?

На рисунке ниже показано, как выглядит мой домен:

https://picasaweb.google.com/100922945973553878191/ActiveDirectory?authuser=0&feat=directlink

Может ли кто-нибудь помочь мне с этим? Я застрял с этой проблемой в течение последнего дня или около того, и я не могу понять, почему. Если у вас есть какие-то коды, я могу попробовать, было бы замечательно

1 Ответ

1 голос
/ 08 марта 2012

Чтобы проверить, существует ли пользователь, ваш код должен выполнить поиск на базовом уровне, используя известное отличительное имя.Если результаты поиска успешны, а количество записей, возвращаемых как часть результата поиска, больше 1, то отличительное имя существует в базе данных каталога.

Это отличается от установления состояния аутентификации соединения, которое выполняется с помощью запроса привязки.Если запрос на привязку выполнен успешно, то состояние аутентификации соединения устанавливается в соответствии с выделенным именем, используемым в привязке.

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

...