Поиск пользователя в подразделении - PullRequest
0 голосов
/ 20 января 2011

У меня есть требование для поиска пользователя в подразделении. Мое решение таково: -

// s = "ou=myou1,ou=myou2,ou=muou3,dc=myad,dc=com" & t = "myad.com"

PrincipalContext context = new PrincipalContext(ContextType.Domain, t, s);
UserPrincipal user = UserPrincipal.FindByIdentity(context, "boborwhoever");
if (user != null) found him!

(прошу прощения за очевидный псевдокод, но вы получите изображение)

Проблема, с которой я сталкиваюсь, заключается в том, что, хотя мой пользователь userPrincipal заполнен, и я нахожу 'bob', если он находится в 'myou3', я могу изменить s на "ou = myou1, dc = myad, dc = com" и все еще найти «боб». Таким образом, кажется, что UserPrincipal.FindByIdentity также проверяет подчиненные подразделения.

Как мне получить, чтобы просто проверить заявленную OU? Или, может быть, я нахожусь вдали и должен все делать лучше: -)

Спасибо Стив

1 Ответ

1 голос
/ 20 января 2011

Вот как я бы это сделал

using System.DirectoryServices

DirectoryEntry de = new DirectoryEntry();
de.Path = "LDAP://**Your connection string here**";
de.AuthenticationType = AuthenticationTypes.Secure;

DirectorySearcher search = new DirectorySearcher(de);
search.Filter = "(SAMAccountName=" + account + ")";

//What properties do we want to return?
search.PropertiesToLoad.Add("displayName");
search.PropertiesToLoad.Add("mail");

search.SearchScope = SearchScope.OneLevel //this makes it only search the specified level

SearchResult result = search.FindOne();

if (result != null)
{
     //Get Him!    }
else
{
    //Not Found
}

использовал это в рабочих процессах sharepoint, и он работал нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...