Как проверить, существует ли пользователь в LDAP - PullRequest
5 голосов
/ 29 ноября 2010

Мне нужно проверить пользователей в компании, используя только их имя пользователя, а не пароль.

Так что мне нужен такой метод

public bool UserExists(string username)
{ ... }

Мне известно о пространстве имен System.DirectoryServices, но я не знаю, с чего начать.

Есть идеи?

Есть более 80 000 записей, поэтому постарайтесь учесть это.

Спасибо.

Редактировать:

Я сделал это - мой код:

private bool UserExists(string userName, string domain)
{
    try
    {
        DirectoryEntry.Exists("WinNT://" + domain + ".[hidden].com/" + userName);
        return true;
    }
    catch (COMException)
    {
        return false;
    }
}

Я не знаю, правильно ли это, но, похоже, это пока работает.

Ответ Михаила состоит из двух частей:

Обновление № 2:

Я действительно использовал это:

public static bool LoggedOnUserExists()
{
    var domain = new PrincipalContext(ContextType.Domain);

    UserPrincipal foundUser = UserPrincipal.FindByIdentity(domain, IdentityType.SamAccountName, Environment.UserName);

    return foundUser != null;
}

Ответы [ 2 ]

6 голосов
/ 29 ноября 2010

В .NET 3.5 и более поздних версиях вы можете использовать пространства имен System.DirectoryServices.AccountManagement, чтобы сделать это довольно просто:

public bool UserExists(string username)
{
   // create your domain context
   using (PrincipalContext domain = new PrincipalContext(ContextType.Domain))
   {
       // find the user
       UserPrincipal foundUser = UserPrincipal.FindByIdentity(domain, IdentityType.Name, username);

       return foundUser != null;
    }
}

Это будет работать с обычным именем пользователя John Doe, или же вы можете использовать адрес электронной почты пользователя (john.doe@company.com) или его отличительное имя (CN=John Doe) - посмотрите, что перечисление предложить: -)

5 голосов
/ 29 ноября 2010

Хорошая статья для начала:

Howto: (почти) все в Active Directory через C #

...