ASP.NET поиск в Active Directory

Я пытаюсь создать веб-сайт интрасети на ASP.NET MVC 4 с помощью входа в Windows. Я успешно выполнил вход в систему windows. Единственное, что я застрял, это поиск в active directory с частичным именем пользователя. Я попытался найти веб-сайт и веб-сайт stackoverflow, но все еще не мог найти ответ.

   DirectoryEntry directory = new DirectoryEntry("LDAP://DC=NUAXIS");
   string filter = "(&(cn=jinal*))";
   string[] strCats = { "cn" };
   List<string> items = new List<string>();
   DirectorySearcher dirComp = new DirectorySearcher(directory, filter, strCats,     SearchScope.Subtree);
   SearchResultCollection results = dirComp.FindAll();

2 ответов


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

// create your domain context
using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain))
{
   // define a "query-by-example" principal - here, we search for a UserPrincipal 
   // and with the first name (GivenName) of "Jinal*" 
   UserPrincipal qbeUser = new UserPrincipal(ctx);
   qbeUser.GivenName = "Jinal*";

   // create your principal searcher passing in the QBE principal    
   using (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. Или увидеть документация MSDN по системе.DirectoryServices.AccountManagement пространство имен.

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

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

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


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

рассмотрим следующий пример:

search.Filter = string.Format("(&(sn={0}*)(givenName={1}*)(objectSid=*))", lastName, firstName);