2010-11-29 8 views
5

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

Так мне нужен способ, как этот

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

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

Любые идеи?

Есть 80 000+ записей, поэтому старайтесь нести это в виду.

спасибо.

Edit:

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

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

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

ответ Майкла имеет две соответствующие части:

Update # 2:

я использовал это:

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

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

    return foundUser != null; 
} 
+2

Вы должны ** НЕ ** использовать провайдер WinNT больше - он строго соответствует обратной совместимости, но он, как правило, не работает в сети AD – 2010-11-29 15:47:04

ответ

5

В .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, или, альтернативно, вы можете использовать адрес электронной почты пользователя ([email protected]) или его выдающееся имя (CN=John Doe) - см., что нужно перечислять IdentityType. o ffer :-)

+0

спасибо marc, это намного лучше. – Nobody 2010-11-30 10:14:58

Смежные вопросы