Hayadi's Blog

jeudi, février 02, 2006

.Net 2.0 & Active directory

Au cours de cet article, nous allons voir comment interagir avec l''annuaire Active Directory de Microsoft grâce au Framework .Net, en effet, ce dernier présente une base solide en la matière depuis sa version 1.1, mais offre de grandes nouveautés dans sa version 2.0, notamment grâce à son namespace System.DirectoryServices.ActiveDirectory

Présentation des namespaces AD du Framework

Namespace System.DirectoryServicesCe namespace était déjà présent dans le Framework 1.1, mais il à évolué dans la version 2.0. Il permet d''accéder au service d''annuaire Active Directory par l''intermédiaire des ADSI (Active Directory Service Interfaces). Ce namespace contient une classe DirectoryEntry et DirectorySearcher qui vont respectivement vous permettre d''accéder à des objets dans l''annuaire et d''y effectuer des recherches. Pour pouvoir utiliser correctement ces différentes classes vous devez connaître au minimum les rudiments de la syntaxe des espaces de noms LDAP, sans quoi vous aurez du mal à accéder à vos différents objets, mais pas de panique vous allez voir que c''est assez simple et très loin d''être insurmontable.
Pour simplifier, ce namespace vous permet de gérer (lecture, ajout, suppression, modification...) les ressources de votre réseau et de les localiser dans l''annuaire.
Namespace System.DirectoryServices.ActiveDirectoryCe namespace mérite que l''on s''y attarde un peu plus et cela pour deux raisons : c''est une nouveauté du Framework .Net 2.0 et surtout il fait le bonheur des administrateurs systèmes souhaitant des applications de gestion de leur infrastructure Active Directory. Tout d''abord, comme son nom l''indique, cet espace de nom est dédié aux interactions de haut niveau avec le célèbre service d''annuaire de Microsoft. Grâce à un nombre très important de classes vous pouvez accéder à Active Directory au plan physique et logique. Vous pouvez accéder directement aux concepts de forêt, des domaines, des contrôleurs de domaine, des partitions, du schéma, du catalogue global, des sous réseaux, des sites... et je pourrais encore continuer la liste, ce namespace est simplement impressionnant, les spécialistes d''Active Directory, au travers de ces quelques lignes doivent déjà entrevoir les possibilités faramineuses (non, non je n''exagère pas) que nous laisse entrevoir cette nouveauté de la version 2.0 du Framework .Net.
Peut-être que tous ces concepts et ces explications vous semblent un peu théoriques, voyons donc maintenant quelles peuvent en être les applications concrètes.

Etablir une connexion avec l''annuaire :

Pour nous connecter à Active Directory, nous allons utiliser la classe DirectoryEntry qui permet d''accéder à un objet dans l''annuaire. Pour nous connecter à un objet dans l''annuaire, il suffit de fournir son nom unique LDAP, ex :
Dim monEntry As New DirectoryEntry("LDAP://" & cheminLdapConteneur, monUsername, monPassword, AuthenticationTypes.Secure)

Récupération des membres d''un groupe

Comme vous le savez déjà certainement, Active Directory permet de créer des groupes (de sécurité ou de distribution) qui contiennent d''autres objets comme des comptes utilisateurs ou des comptes d''ordinateurs par exemple. L''avantage principal de l''utilisation des groupes est qu''ils permettent de centraliser et de regrouper des objets afin d''en faciliter l''administration, mais là n''est pas le thème de cet article donc je n''entrerai pas plus dans les détails. Voyons comment récupérer par le code la liste des utilisateurs contenus dans un groupe donné.
La démarche va être la suivante :
Connexion à l''annuaire Active Directory Récupération de la propriété " members " d''un groupe Boucle pour parcourir la propriété " members " Renvoi du résultat Exemple montrant comment lister les utilisateurs du groupe "Utilisateurs du domaine" : Lister les membres d''un groupe : Public Function listeMembresGroupe(ByVal cheminLdapGroupe As String, _ ByVal monUsername As String, _ ByVal monPassword As String) As ArrayList
'' Instanciation de la liste qui va contenir le résulat Dim maListeMembres As New ArrayList
Try
'' Groupe dont les membres sont à lister Dim monGroupe As New DirectoryEntry("LDAP://" & cheminLdapGroupe, _ monUsername, monPassword, AuthenticationTypes.Secure)
Dim unMembre As New Object() '' Ajoute chaque membre trouvé à notre ArrayList à retourner For Each unMembre In monGroupe.Properties("member") maListeMembres.Add(unMembre.ToString) Next
monGroupe.Close()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
'' Retourne la liste des membres du groupe Return maListeMembres
End Function
Télécharger la documentation compléte sur cette article : ftp://ftp-developpez.com/webman/articles/dotnet/activedirectory/vbnet/ActiveDirectory.pdf