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);