Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

ASP.NET - COMMENT QUESTIONNER UN CONTRÔLEUR DE DOMAINE ACTIVE DIRECTORY


Information sur la source

Catégorie :Réseau & Internet Source .NET ( DotNet ) Niveau : Initié Date de création : 06/03/2003 Date de mise à jour : 07/10/2004 12:46:42 Vu : 29 859

Note :
10 / 10 - par 2 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (27)
Ajouter un commentaire et/ou une note


Description

Dans le cadre de l'administration des Utilisateurs sur un domaine Active Directory, un système d'intérogation du Contrôleur de Domaine est bien utile pour récupérer toutes les informations disponible sur un Utilisateur.

Par exemple :
  Connaître le Nom et Prénom de la personne se connectant avec le login toto10
  
 

Source

  • Imports System.DirectoryServices
  • ...
  • ' Le code de la fonction simple
  • ' -----------------------------------------------------
  • Public ChaineConn As String = "LDAP://MonControleurdeDomaineActiveDirectory"
  • Public rootEntry As New DirectoryEntry(ChaineConn, LoginAD, PasswordAD)
  • Public Login As String = ""
  • Public Nom As String = ""
  • Public Prenom As String = ""
  • Public Telephone As String = ""
  • Public Email As String = ""
  • Public Bureau As String = ""
  • Public Initials As String = ""
  • Public Description As String = ""
  • Public Entreprise As String = ""
  • Public Service As String = ""
  • ' -----------------------------------------------------
  • Public Sub CherchePersonne(ByVal LeLogin As String)
  • ' Cherche les Informations Sur le Compte suivant le Login Transmis
  • Dim searcher As New DirectorySearcher(rootEntry)
  • ' Mettre ici les valeurs des différents attributs
  • searcher.PropertiesToLoad.Add("cn")
  • searcher.PropertiesToLoad.Add("givenname")
  • searcher.PropertiesToLoad.Add("sn")
  • searcher.PropertiesToLoad.Add("telephoneNumber")
  • searcher.PropertiesToLoad.Add("mail")
  • searcher.PropertiesToLoad.Add("physicalDeliveryOfficeName")
  • searcher.PropertiesToLoad.Add("Initials")
  • searcher.PropertiesToLoad.Add("Description")
  • searcher.PropertiesToLoad.Add("department")
  • searcher.PropertiesToLoad.Add("Company")
  • searcher.Filter = "(&(anr=" & LeLogin & ")(objectCategory=person))"
  • Dim results As SearchResultCollection
  • results = searcher.FindAll()
  • If results.Count > 0 Then
  • Dim result As SearchResult
  • For Each result In results
  • Login = CStr(result.Properties("cn")(0))
  • If Not (result.Properties("givenname") Is Nothing) Then
  • Nom = Trim(CStr(result.Properties("givenname")(0)))
  • End If
  • If Not (result.Properties("sn") Is Nothing) Then
  • Prenom = Trim(CStr(result.Properties("sn")(0)))
  • End If
  • If Not (result.Properties("telephoneNumber") Is Nothing) Then
  • Telephone = Trim(CStr(result.Properties("telephoneNumber")(0)))
  • End If
  • If Not (result.Properties("mail") Is Nothing) Then
  • Email = Trim(CStr(result.Properties("mail")(0)))
  • End If
  • If Not (result.Properties("physicalDeliveryOfficeName") Is Nothing) Then
  • Bureau = Trim(CStr(result.Properties("physicalDeliveryOfficeName")(0)))
  • End If
  • If Not (result.Properties("Initials") Is Nothing) Then
  • Initials = Trim(CStr(result.Properties("Initials")(0)))
  • End If
  • If Not (result.Properties("Description") Is Nothing) Then
  • Description = Trim(CStr(result.Properties("Description")(0)))
  • End If
  • If Not (result.Properties("Company") Is Nothing) Then
  • Entreprise = Trim(CStr(result.Properties("Company")(0)))
  • End If
  • If Not (result.Properties("department") Is Nothing) Then
  • Service = Trim(CStr(result.Properties("department")(0)))
  • End If
  • Next
  • End If
  • End Sub
Imports System.DirectoryServices
...

' Le code de la fonction simple 

' -----------------------------------------------------
Public ChaineConn As String = "LDAP://MonControleurdeDomaineActiveDirectory"
Public rootEntry As New DirectoryEntry(ChaineConn, LoginAD, PasswordAD)

Public Login As String = ""
Public Nom As String = ""
Public Prenom As String = ""
Public Telephone As String = ""
Public Email As String = ""
Public Bureau As String = ""
Public Initials As String = ""
Public Description As String = ""
Public Entreprise As String = ""
Public Service As String = ""

' -----------------------------------------------------
Public Sub CherchePersonne(ByVal LeLogin As String)
 ' Cherche les Informations Sur le Compte suivant le Login Transmis

 Dim searcher As New DirectorySearcher(rootEntry)

 ' Mettre ici les valeurs des différents attributs
 searcher.PropertiesToLoad.Add("cn")
 searcher.PropertiesToLoad.Add("givenname")
 searcher.PropertiesToLoad.Add("sn")
 searcher.PropertiesToLoad.Add("telephoneNumber")
 searcher.PropertiesToLoad.Add("mail")
 searcher.PropertiesToLoad.Add("physicalDeliveryOfficeName")
 searcher.PropertiesToLoad.Add("Initials")
 searcher.PropertiesToLoad.Add("Description")
 searcher.PropertiesToLoad.Add("department")
 searcher.PropertiesToLoad.Add("Company")

 searcher.Filter = "(&(anr=" & LeLogin & ")(objectCategory=person))"

 Dim results As SearchResultCollection
 results = searcher.FindAll()

 If results.Count > 0 Then
   Dim result As SearchResult
   For Each result In results
     Login = CStr(result.Properties("cn")(0))
     If Not (result.Properties("givenname") Is Nothing) Then
       Nom = Trim(CStr(result.Properties("givenname")(0)))
     End If
     If Not (result.Properties("sn") Is Nothing) Then
       Prenom = Trim(CStr(result.Properties("sn")(0)))
     End If
     If Not (result.Properties("telephoneNumber") Is Nothing) Then
       Telephone = Trim(CStr(result.Properties("telephoneNumber")(0)))
     End If
     If Not (result.Properties("mail") Is Nothing) Then
       Email = Trim(CStr(result.Properties("mail")(0)))
     End If
     If Not (result.Properties("physicalDeliveryOfficeName") Is Nothing) Then
       Bureau = Trim(CStr(result.Properties("physicalDeliveryOfficeName")(0)))
     End If
     If Not (result.Properties("Initials") Is Nothing) Then
       Initials = Trim(CStr(result.Properties("Initials")(0)))
     End If
     If Not (result.Properties("Description") Is Nothing) Then
       Description = Trim(CStr(result.Properties("Description")(0)))
     End If
     If Not (result.Properties("Company") Is Nothing) Then
       Entreprise = Trim(CStr(result.Properties("Company")(0)))
     End If
     If Not (result.Properties("department") Is Nothing) Then
       Service = Trim(CStr(result.Properties("department")(0)))
     End If
   Next
 End If
End Sub
  

Conclusion

On peut très bien a partir de ce système faire une personnalisation d'une page Intranet avec Authentification sur le Contrôleur LDAP.

Ainsi une fois que toto10 aura entré son mot de passe pour lancer la page Intranet de son entreprise il verrait apparaître son nom prénom, ...

De la même facon un Annuaire complêt d'une entreprise avec un AD déja enrichi peut être "Webisé".

Romelard Fabrice (Alias F___)

  
 

Historique

07 octobre 2004 12:46:43 :
Ajout de l'import du Namespace de l'AD.

Commentaires et avis

signaler à un administrateur
Commentaire de Nocturne le 07/03/2003 17:19:25

Salut fabrice69,
Il est bien ton code.
Juste une question, je n'utilise pas Active directory mais la Gestion de l'ordinateur ou son parametre les comptes utilisateurs.
As tu une idee comment faire pour recuperer les infos sur un utilisateur.
Merci d'avance.
Bonne prog, a+

signaler à un administrateur
Commentaire de lg5 le 23/04/2004 12:57:10

Me met "type DirectoryEntry non défini"
A+

signaler à un administrateur
Commentaire de Doots78 le 01/06/2004 19:47:16

Pareil... type DirectoryEntry non défini, pourtant j'ai bien importé les espace de noms qu'il faut.
<%@ import Namespace="System" %>
<%@ import Namespace="System.DirectoryServices" %>
<%@ import Namespace="System.DirectoryServices.DirectoryEntry" %>

Est-ce moi qui fait une erreur... ou y a t'il un problème ? En tout cas ce code est trés prometteur et m'interesse beaucoup !! :)

@+

signaler à un administrateur
Commentaire de fabrice69 le 01/06/2004 20:35:00 administrateur CS

Il faut ajouter la DLL "System.DirectoryServices" .NET dans Visual Studio.NET.

C:\WINNT\Microsoft.NET\Framework\v1.1.4322\System.DirectoryServices.dll

F___

signaler à un administrateur
Commentaire de ssebounet le 21/06/2004 16:38:26

Non pas obliger d'avoir le framework 1.1 le 1.0 suffit.
J'ai reussi a me connecter et a recuperer des certificats...
tres bon code merci beaucoup fabrice69

signaler à un administrateur
Commentaire de panza le 17/08/2004 10:29:51

Bonjour

As tu un code pour réinitialiser le mot de passe d'un utilisateur de l'AD, par une chaine xxxx
?

merci : panzabitsaka@free.fr

signaler à un administrateur
Commentaire de eihpos le 04/10/2004 17:38:28

Salut Fabrice69,
J'ai comme d'hab une petite question angoissante. Est-il possible à partir d'un site en ASP.net de modifier certains attributs d'un objet LDAP.
En fait ce que je voudrait faire c'est un intranet avec differents types d'utilisateurs. Ceci en utilisant LDAP. Je me demande si un administrateur pourrait par le biais de l'appli ASP.net définir les attributs qui définissent le type d'utilisateur de l'appli. Je ne sais pas si j'ai été claire.
Merci de ton aide.

signaler à un administrateur
Commentaire de rickymix le 06/10/2004 16:05:48

Me met "type DirectoryEntry non défini"

Il faut ajouter la DLL "System.DirectoryServices" .NET dans Visual Studio.NET.

C:\WINNT\Microsoft.NET\Framework\v1.1.4322\System.DirectoryServices.dll

J'utilise Webmatrix et je n'arrive pas a utiliser cette DLL. je ne connais pas la procédure pour que la classe soit reconnue.
Merci pour votre aide.

RM

signaler à un administrateur
Commentaire de HalfScrum le 06/10/2004 22:37:23

Yo Ricky,
Pour Web Matrix copie "system.DirectoryServices.dll" dans le répertoire "bin" de ton application

signaler à un administrateur
Commentaire de fabrice69 le 07/10/2004 10:00:01 administrateur CS

De quels attributs parles tui eihpos ?

Ce sont les propriétés (nom, prénom, ...) ou non ?

F___

signaler à un administrateur
Commentaire de eihpos le 07/10/2004 10:16:21

oui ce genre d'attribut en fait c'est un attribut de la classe user qui permet de définir un profil applicatif à l'utilisateur : ex pour l'appli X l'utilisateur a pour profil QUALIF. A partir de là on en déduit les droits qu'il a dans l'appli intranet.
Il s'agit d'un attribut optionnel.
Je voudrai pouvoir en modifier la valeur à partir de l'appli ASP.NET.
Est-ce possible à ta connaisssance ?

signaler à un administrateur
Commentaire de fabrice69 le 07/10/2004 10:41:31 administrateur CS

Je ne parle pas de la partie de ton application Intranet, mais des paramètres de L'AD que tu veux modifier.

Qu'est ce que tu veux changer pour un Compte Utilisateur de l'AD ? Est-ce un profil ? Est-ce son appartenance à des Groupes LDAP ?

F___

signaler à un administrateur
Commentaire de zack67 le 07/10/2004 12:07:26

Cette source a l'air excellent (non, non, ce n'est pas une faute de français!), mais impossible de l'utiliser. Comme pour "lg5" ou "rickymix" j'ai le message "Type 'Directoryentry' non défini", pourtant j'ai ajouté la dll "System.DirectoryServices" dans mes références ainsi que dans le répertoire bin de l'appli (bien que je travaille sur visual studio). Aurrais-tu une idée pour corriger ce pb ?

J'en profite pour te remercier de partager tes connaissances, c'est un sacré boulot que tu réalises !

signaler à un administrateur
Commentaire de fabrice69 le 07/10/2004 12:45:30 administrateur CS

En entete du code :
Imports System.DirectoryServices


Dans les références de VS.NET, tu ajoutes System.DirectoryServices.dll à ton projet.

Pour ce qui est de WebMatrix, ne travaillant pas avec cet outil, je ne peux pas vous aider.

Romelard Fabrice.

signaler à un administrateur
Commentaire de eihpos le 07/10/2004 13:45:46

Qu'est ce que tu veux changer pour un Compte Utilisateur de l'AD ? Est-ce un profil ? Est-ce son appartenance à des Groupes LDAP  ----
En fait je veut changer un paramètre qui est du meme genre que sn st ou autre postaladress.
Je voudrais savoir si ils sont accessibles en modif depuis ASP.NET

signaler à un administrateur
Commentaire de rickymix le 07/10/2004 16:30:30

Merci pour votre aide...
Au top, en ajoutant <%@ import Namespace="System.DirectoryServices" %> en haut de ma page ca fonctionne, enfin je n'ai plus d'erreur.
Maitenant il faut que je vérifie si ma connexion se fait bien car lorsque j'appelle la fonction par un clik sur bouton
Sub Button1_Click(sender As Object, e As EventArgs)
    CherchePersonne("Nomdelapersonne")
    End Sub

Rien ne se passe.
Avez vous une idée ?

Merci

RM

signaler à un administrateur
Commentaire de broyer le 25/10/2004 18:43:22

Je n'ai qu'un mot à dire... Merci !

signaler à un administrateur
Commentaire de molkin le 08/11/2004 20:35:55

Aaaah comprend pas... j'ai le message que tout le monde a : "Type 'DirectoryEntry' is not defined." Grrrr.

Je n'utilise pas visual Studio, donc je ne sais pas ou je dois ajouter System.DirectoryServices.dll.

Je l'ai copié dans le repertoire "bin" de l'appli.
J'ai saisi : <%@ Import Namespace="System.DirectoryServices" %>

Mais toujours pareil...
Si quelqu'un a une petite idée... MERCI d'avance !

signaler à un administrateur
Commentaire de molkin le 08/11/2004 20:37:37

Desolé, mon navigateur, a un peu planté sur ce coup... En esperant qu'un admin supprime les doublons... Thanks

signaler à un administrateur
Commentaire de molkin le 08/11/2004 22:54:43

Bon j'ai trouvé a peu près une reponse sur ce site : http://www.developer.com/lang/other/print.php/10942_982451_4

Rajouter :

<%@ Import Namespace="System.DirectoryServices" %>
<%@ Assembly Name="System.DirectoryServices" %>

Permet de savoir ce qui ce passe pendant le chargement de la dll. et les divers repertoires ou .net framework recherche la dll.

Dans mon cas il fallait creer manuellement un repertoire et placer la dll a l'interieur.

ça marche mieux maintenant, meme si j'ai encore des bugs... mais c'est une autre histoire.

Merci @tout

signaler à un administrateur
Commentaire de myroots le 17/02/2005 12:31:20

O que c bien trouvé com solution ! sincères Félicitations  Fabrice !

je n'ai pas encore testé cette jolie source, mai elle me parrait parfaite pour ce que j'ai a mettre en oeuvre.

Malheureusement, il me manque une information...

J'aurai besoin de récupérer le login que saisi le user au demarrage de la sesssion, pour ensuite aller voir à quel groupe il appartient...

en gros ma question c'est :

comment puis je savoir quel est le user de la session sous laquelle tourne mon appli ...?

ca me permettra de définir a quel groupe appartien le user pour définir ses accès à l'application que je developpe... (ca m'éviterai d'avoir un 're-login' specifique pr l'appli)

Merci d'avance :-)

MyRooTs

signaler à un administrateur
Commentaire de myroots le 17/02/2005 14:21:59

Des recherches plus approfondies sur le sujet m'on données ma réponse :

http://www.vbfrance.com/forum.v2.aspx?ID=11663

sur un site code-source en plus ;-)

je sais, j'ai pas l'air con à me répondre,
mais bon si qq peu economiser d recherches grace a ces quelques lignes

signaler à un administrateur
Commentaire de Tanis49 le 04/07/2005 15:59:39

Félicitation ta source fonctionne très bien (je l'utilise Merci ;) )
Mon soucis est de trouver la liste des "searcher.PropertiesToLoad.Add " comme "cs" ect...
ce ne sont pas les champs de l'active directory? ...
pourrai tu m'indiquer ou chercher, parce que la je tourne un peu en rond...  

signaler à un administrateur
Commentaire de garnier54 le 30/03/2007 15:34:35

merci pour ton code
j'ai juste un probleme avce le code qui plante quand la zone est vide
malgre le test. Avez vous une solution

suis en framework v2

merci

signaler à un administrateur
Commentaire de diabolo72 le 03/10/2007 14:07:31

bonjour,
je suis vraiment un débutant en asp.net et j'ai éssayé votre solution pour récupéré des informations de l'AD seulement ça ne marche pas et je tourne en rond je ne comprend pas pourquoi cela ne marche pas! (je suis en train de faire un site utilisant l'AD.) Pourriez vous me fournir le projet complet, cela m'aiderai beaucoup pour mon travail.
merci de votre compréhension

signaler à un administrateur
Commentaire de trialman53 le 06/05/2008 08:48:19

Bonjour,
Je réalise une interface graphique en VB.NET pour interagir avec Active Directory mais il m'est impossible d'importer le namespace System.DirectoryServices. Pourtant la dll correspondante est bien présente.
Quelqu'un pourrait-il m'aider ?
Merci d'avance.
Max.

signaler à un administrateur
Commentaire de imedo le 10/06/2008 08:42:57

bonjour a tous
comment je peut telecharger le fichier System.DirectoryServices.dll
si quelqu'un a ce fichier SVP envoyer moi
voila mon email imedo_bena@hotmail.com
maeci

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,296 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.