web-dev-qa-db-fra.com

Interroger un LDAP

Je n'ai jamais travaillé avec un LDAP auparavant, donc je suis un peu perdu. Je dois me connecter à une source LDAP pour trouver un attribut spécifique et le modifier. L'entrée du programme est un fichier CSV avec une liste d'utilisateurs. Le programme est censé lire l'UID du fichier CSV, trouver l'enregistrement dans le LDAP et remplacer un certain attribut. Je ne sais pas comment faire ça. Quelqu'un pourrait-il m'orienter dans la bonne direction, s'il vous plaît?

32
Graeme

@KenL m'a presque amené là. J'ai également dû définir le type d'authentification de DirectoryEntry pour le faire fonctionner. Faites également attention à la façon dont vous utilisez les caractères génériques ( Kleene Stars ).

DirectoryEntry rootEntry = new DirectoryEntry("LDAP://some.ldap.server.com");
rootEntry.AuthenticationType = AuthenticationTypes.None; //Or whatever it need be
DirectorySearcher searcher = new DirectorySearcher(rootEntry);
var queryFormat = "(&(objectClass=user)(objectCategory=person)(|(SAMAccountName=*{0}*)(cn=*{0}*)(gn=*{0}*)(sn=*{0}*)(email=*{0}*)))";
searcher.Filter = string.Format(queryFormat, searchString);
foreach(SearchResult result in searcher.FindAll()) 
{
    Console.WriteLine("account name: {0}", result.Properties["samaccountname"].Count > 0 ? result.Properties["samaccountname"][0] : string.Empty);
    Console.WriteLine("common name: {0}", result.Properties["cn"].Count > 0 ? result.Properties["cn"][0] : string.Empty);
}
23
rstackhouse

Premier élément de réponse , utilisant ADSI (à l'ancienne)

Comment faire presque tout (avec ADSI) sur Active Directory avec C #

Deuxième élément de réponse , débutant .NET 3.5 Microsoft présente ' Principal' et ' AccountManagement '.

Comment faire presque tout (avec AccountManagement) sur Active Directory avec C #

Troisième élément de réponse , vous pouvez utiliser un protocole de bas niveau (LDAP natif) avec System.DirectoryServices.Protocols (S.DS.P) .

Remarque : Si vous êtes intéressé par la façon d'interroger Active Directory à partir du code natif, vous pouvez consulter l'API LDAP C-Binding comme décrit dans RFC 1823 spécifie, Microsoft le prend en charge, voir MS Strategy for Lightweight Directory Access Protocol (LDAP) . Vous trouverez les manuels d'utilisation et de référence du API Microsoft dans Lightweight Directory Access Protocol .

20
JPBlanc

en ce qui concerne le code, il est beaucoup plus simple que vous ne le pensez. Vous devez créer une connexion au répertoire, configurer un chercheur, puis rechercher par nom de propriété.

DirectoryEntry entry = new DirectoryEntry("LDAP://MyDomain.com");
DirectorySearcher dSearch = new DirectorySearcher(entry);
dSearch.Filter = "(&(objectCategory=person)(objectClass=user)(" + SType + "=" + Name + "))";

SType est le type de nom et Name est le nom d'utilisateur réel

14
KenL