2010-01-12 11 views

Répondre

1

Essayez ceci:

string strDomain = DOMAINNAME; 
string strUserId = USERNAME; 

string strPath = "LDAP://DC=" + strDomain.Trim() + ",DC=com"; 

DirectoryEntry de = new DirectoryEntry(strPath); 
DirectorySearcher deSearch = new DirectorySearcher(de); 

deSearch.Filter = "(&(objectClass=user)(SAMAccountName=" + strUserId.Trim() + "))"; 

SearchResult results = deSearch.FindOne(); 
if ((results == null)) 
{ 
    //No User Found 
} 
else 
{ 
    //User Found 
} 
+1

Je recommanderais d'utiliser objectCategory = person au lieu de objectClass. ObjectCategory a une seule valeur et est indexé, alors que objectClass n'est pas -> using objectCategory rend votre requête AD plus rapide –

+0

@marc_s: On peut utiliser à la fois * objectCategory * et * objectClass * ou * objectClass * seulement en utilisant * objectCategory * seulement dans le filtre ne fonctionne pas dans .NET. –

+0

Vous ne devez pas utiliser cette méthode, car elle tente également de * lire * les valeurs dans Active Directory, plutôt que de vérifier l'authentification. Vous pouvez avoir des informations d'identification valides, mais le code échouera car vous n'êtes pas autorisé à rechercher des utilisateurs. –

2

Si vous êtes sur .NET 3.5, vous pouvez utiliser les fonctions System.DirectoryServices.AccountManagement. Votre code ressemblerait à quelque chose comme:

// create a "principal context" - e.g. your domain (could be machine, too) 
PrincipalContext pc = new PrincipalContext(ContextType.Domain, "YOURDOMAIN"); 

UserPrincipal user = UserPrincipal.FindByIdentity(pc, "username"); 

bool userExists = (user != null); 

Cela devrait faire l'affaire ;-)

Pour plus de détails sur S.DS.AM, voir cet excellent article MSDN:

Managing Directory Security Principals in the .NET Framework 3.5

Questions connexes