Не удалось запросить AD без отличительного имени в SearchRequest?

Я запускаю тест Active Directory и пытаюсь выполнить запрос с помощью ldap. Я создал объект searchrequest с пустым дистрибутивным именем и фильтром, который выбрасывает код ошибки noSuchObject с сообщением "объект не существует". Я получаю это только из своей тестовой AD, если я использую производственную AD моей компании, я не получаю исключения, просто ответ без попадания. Что мне нужно изменить в моей тестовой AD, чтобы увидеть подобное поведение?

3 ответа

Решение

Спасибо за другие ответы. Я решил свою проблему, используя порт GC 3268 вместо порта 389 DC в соединении.

@marc_s ответил, дав вам способ поиска

Вернемся к вашему вопросу, просто отзыв:

Поиск LDAP

  1. Кличка, с которой вы просите начать поиск (в вашем случае DN вашей OU)
  2. Объем вашего поиска (базовый, одноуровневый, поддерево)
  3. Фильтр вашего поиска ((objectClass=group))
  4. Атрибуты, которые вы хотите получить

В вашем случае это работает, когда ваш уровень ADSI может найти домен по умолчанию. Так что я думаю, что вы должны создать реальный запрос LDAP-SEARCH и, возможно, также предоставить учетные данные.

Вы можете использовать PrincipalSearcher и принцип "запрос за примером" для поиска:

// create your domain context
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);

// define a "query-by-example" principal - here, we search for a UserPrincipal 
// and with specified last name (surname)
UserPrincipal qbeUser = new UserPrincipal(ctx);
qbeUser.Surname = "Willis";

// create your principal searcher passing in the QBE principal    
PrincipalSearcher srch = new PrincipalSearcher(qbeUser);

// find all matches
foreach(var found in srch.FindAll())
{
    // do whatever here - "found" is of type "Principal" - it could be user, group, computer.....          
}

Если вы еще этого не сделали - обязательно прочитайте статью MSDN " Управление принципами безопасности каталогов" в.NET Framework 3.5, которая показывает, как наилучшим образом использовать новые функции в System.DirectoryServices.AccountManagement

Конечно, в зависимости от ваших потребностей, вы можете захотеть указать другие свойства для этого пользовательского субъекта "запрос за примером", который вы создаете:

  • Surname (или фамилия)
  • DisplayName (обычно: имя + пробел + фамилия)
  • SAM Account Name - имя вашей учетной записи Windows/AD
  • User Principal Name - ваше имя в стиле "username@yourcompany.com"

Вы можете указать любое из свойств на UserPrincipal и использовать их как "запрос за примером" для вашего PrincipalSearcher,

Другие вопросы по тегам