[.NET] Faire une requête Active Directory dans les sous-domaine d'un domaine
Lorsque vous faîtes une recherche/requête dans Active Directory, en .NET, vous utilisez tout naturellement la classe DirectoryEntry en lui indiquant les paramètes adéquats:
DirectoryEntry
de =
new
DirectoryEntry
(
null
,
null
,
null
,
AuthenticationTypes
.Secure);
de.Path =
String
.Format(
"LDAP://{0}"
,
this
.Server);
de.Username =
this
.UserName;
de.Password =
this
.Password;
string
filter =
String
.Format(
"(&(objectCategory=Person)(objectClass=user)(cn={0}))"
, name);
DirectorySearcher
ds =
new
DirectorySearcher
(de);
ds.Filter = filter;
ds.PropertiesToLoad.Add(
"SAMAccountName"
);
SearchResult
sr = ds.FindOne();
Seulement voila, si vous essayez d'acceder aux informations d'utilisateurs qui sont dans un autre sous-domaine que vous (par exemple, vous êtes dans le sous-domaine toto.microsoft.com et vous voulez accédez aux données d'un utilsiateur qui est dans titi.microsoft.com), votre SearchResult retournera null !
En effet, lorsque vous utilisez "LDAP://", vous demandez à faire une recherche des membres des groupes locaux du domaine.
Vous devez donc faire votre recherche sur le Catalogue Global (Global Catalog) qui n'est rien d'autre qu'un contrôleur de domaine qui possède tous les objets du domaine.
Pour cela, il vous suffit de modifier la propriété Path de votre DirectoryEntry et au lieu d'utiliser LDAP://, vous allez utiliser GC://
DirectoryEntry de = new DirectoryEntry(null, null, null, AuthenticationTypes.Secure);
de.Path = String.Format("GC://{0}", this.Server);
Et voilà, à présent, vos requêtes se feront bien sur tous les sous-domaines !
Voici un lien pour aggrémenter la lecture de ce post: http://msdn2.microsoft.com/en-us/library/ms675564.aspx
A+
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :