Comment établir une connexion entre une application web c# et LDAP de l'Active Directory ?
Avant de commencer à parler codage, intéressons-nous à Active
Directory, afin de comprendre ce que c'est. Active Directory, c'est le
service d'annuaire de Microsoft Windows 2000. Il permet de gérer les
ressources du réseau : données utilisateurs, imprimantes, serveurs, base
de données, groupes, ordinateurs et stratégies de sécurité.
Comment établir une connexion entre une application web c# et LDAP de l'Active Directory ?
Les utilisateurs n'ont pas à se préoccuper de la structure physique du réseau pour accéder à ces ressources.
Comment établir une connexion entre une application web c# et LDAP de l'Active Directory ?
Active Directory simplifie l'administration du réseau en permettant l'accès à toutes ces ressources à partir d'un seul et unique point d'administration. Les autres bénéfices sont une structure hiérarchique flexible et la capacité de montée en charge qui autorise le stockage de plusieurs millions de ressources.
Comment établir une connexion entre une application web c# et LDAP de l'Active Directory ?
Pour se connecter à l'Active Directory, il faut utiliser le protocole de connexion LDAP (Lightweight Directory Access Protocol), qui est un protocole de gestion d'annuaire de réseau.
Comment établir une connexion entre une application web c# et LDAP de l'Active Directory ?
Les utilisateurs n'ont pas à se préoccuper de la structure physique du réseau pour accéder à ces ressources.
Comment établir une connexion entre une application web c# et LDAP de l'Active Directory ?
Active Directory simplifie l'administration du réseau en permettant l'accès à toutes ces ressources à partir d'un seul et unique point d'administration. Les autres bénéfices sont une structure hiérarchique flexible et la capacité de montée en charge qui autorise le stockage de plusieurs millions de ressources.
Comment établir une connexion entre une application web c# et LDAP de l'Active Directory ?
Pour se connecter à l'Active Directory, il faut utiliser le protocole de connexion LDAP (Lightweight Directory Access Protocol), qui est un protocole de gestion d'annuaire de réseau.
Active Directory et Visual Studio
Avant de pouvoir utiliser les objets nécessaires à la
manipulation d'Active Directory, vous devez ajouter une référence dans
Visual Studio :
System.DirectoryServices.dll
Vous devez donc avoir ceci :
Ensuite, pensez à ajouter la référence dans les clauses using, en faisant :
Ce qui donne :
Comment établir une connexion entre une application web c# et LDAP de l'Active Directory ?
Une fois que vous avez fait cela, vous pouvez passer à la partie codage proprement dite, et donc commencer par vous connecter à Active Directory.
System.DirectoryServices.dll
Vous devez donc avoir ceci :
Comment établir une connexion entre une application web c# et LDAP de l'Active Directory ? |
Ensuite, pensez à ajouter la référence dans les clauses using, en faisant :
Ajout du namespace System.DirectoryServices
Sélectionnez
using System.DirectoryServices;
Ce qui donne :
Comment établir une connexion entre une application web c# et LDAP de l'Active Directory ? |
Comment établir une connexion entre une application web c# et LDAP de l'Active Directory ?
Une fois que vous avez fait cela, vous pouvez passer à la partie codage proprement dite, et donc commencer par vous connecter à Active Directory.
Connexion à Active Directory
La connexion à un annuaire Active Directory est très simple, sans doute la partie la plus simple du codage.
Pour vous connecter à Active Directory, vous devez utiliser l'objet DirectoryEntry.
Le constructeur de cet objet prend en paramètre trois chaînes de caractères :
Vous devez donc avoir quelque chose comme ceci :
Si aucune erreur n'est interceptée par la clause Catch, cela signifie que vous vous êtes connecté avec succès à Active Directory.
Comment établir une connexion entre une application web c# et LDAP de l'Active Directory ?
Vous pouvez donc passer à la suite de l'article, c'est-à-dire au listage des utilisateurs d'Active Directory.
Pour vous connecter à Active Directory, vous devez utiliser l'objet DirectoryEntry.
Le constructeur de cet objet prend en paramètre trois chaînes de caractères :
- le chemin vers l'annuaire Active Directory (également appelé AD) : ce chemin est de la forme : LDAP://votre-nom-AD ;
- le nom d'utilisateur pour la connexion (l'utilisateur doit faire partie de l'AD) ;
- le mot de passe correspondant.
Vous devez donc avoir quelque chose comme ceci :
Connexion à l'annuaire Active Directory
Sélectionnez
try
{
DirectoryEntry Ldap =
new DirectoryEntry
("
LDAP://votre-nom-AD
"
, "
Login
"
, "
Password
"
);
}
catch
(Exception Ex)
{
Console.WriteLine
(Ex.Message);
}
Si aucune erreur n'est interceptée par la clause Catch, cela signifie que vous vous êtes connecté avec succès à Active Directory.
Comment établir une connexion entre une application web c# et LDAP de l'Active Directory ?
Vous pouvez donc passer à la suite de l'article, c'est-à-dire au listage des utilisateurs d'Active Directory.
Listage des utilisateurs
Pour lister les utilisateurs présents dans Active Directory, le
principe est simple : on parcourt l'AD et à chaque fois que l'on
rencontre un objet de type utilisateur, on affiche les informations
voulues. Voilà pour la théorie, passons maintenant à la pratique !
Pour effectuer une recherche dans l'AD, vous devez utiliser l'objet DirectorySearcher.
Comment établir une connexion entre une application web c# et LDAP de l'Active Directory ?
Ensuite, il vous faut préciser un filtre de recherche, au moyen de la propriété Filter. Dans notre cas, nous ne désirons avoir que les utilisateurs, donc nous écrivons :
L'objet DirectorySearcher possède deux méthodes principales pour la recherche :
Nous désirons lister tous les utilisateurs, nous allons donc utiliser la méthode FindAll() :
Ce code vous permet d'accéder aux diverses informations sur chaque utilisateur contenu dans Active Directory. Je n'ai limité ici l'affichage qu'à ces valeurs, mais vous pouvez tout à fait en rajouter d'autres, telles que l'adresse, la société, etc.
Une liste complète des attributs pouvant être visualisés peut être trouvée ici :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/adschema/adschema/c_user.asp
Voici le code définitif :
Pour effectuer une recherche dans l'AD, vous devez utiliser l'objet DirectorySearcher.
Initialisation de la recherche
Sélectionnez
DirectoryEntry Ldap =
new DirectoryEntry
("
LDAP://votre-nom-AD
"
, "
Login
"
, "
Password
"
);
DirectorySearcher searcher =
new DirectorySearcher
(Ldap);
Ensuite, il vous faut préciser un filtre de recherche, au moyen de la propriété Filter. Dans notre cas, nous ne désirons avoir que les utilisateurs, donc nous écrivons :
Filtrage sur les utilisateurs
Sélectionnez
searcher.Filter =
"
(objectClass=user)
"
;
L'objet DirectorySearcher possède deux méthodes principales pour la recherche :
- FindOne(), qui retournera le premier objet correspondant au critère de recherche ;
- FindAll(), qui retourne tous les enregistrements correspondant au critère de recherche.
Nous désirons lister tous les utilisateurs, nous allons donc utiliser la méthode FindAll() :
On boucle pour récupérer et afficher les informations désirées
Sélectionnez
foreach
( SearchResult result in searcher.FindAll
() )
{
//
On
récupère
l'entrée
trouvée
lors
de
la
recherche
DirectoryEntry DirEntry =
result.GetDirectoryEntry
();
//
On
peut
maintenant
afficher
les
informations
désirées
Console.WriteLine
("
Login
:
"
+
DirEntry.Properties["
SAMAccountName
"
].Value);
Console.WriteLine
("
Nom
:
"
+
DirEntry.Properties["
sn
"
].Value);
Console.WriteLine
("
Prénom
:
"
+
DirEntry.Properties["
givenName
"
].Value);
Console.WriteLine
("
Email
:
"
+
DirEntry.Properties["
mail
"
].Value);
Console.WriteLine
("
Tél
:
"
+
DirEntry.Properties["
TelephoneNumber
"
].Value);
Console.WriteLine
("
Description
:
"
+
DirEntry.Properties["
description
"
].Value);
Console.WriteLine
("
-------------------
"
);
}
Ce code vous permet d'accéder aux diverses informations sur chaque utilisateur contenu dans Active Directory. Je n'ai limité ici l'affichage qu'à ces valeurs, mais vous pouvez tout à fait en rajouter d'autres, telles que l'adresse, la société, etc.
Une liste complète des attributs pouvant être visualisés peut être trouvée ici :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/adschema/adschema/c_user.asp
Voici le code définitif :
Comment établir une connexion entre une application web c# et LDAP de l'Active Directory ? |
VI. Modification d'un utilisateur
Modifier un utilisateur est aussi simple que d'afficher les
utilisateurs. En effet, pour le modifier, il vous faut juste le trouver
dans Active Directory (ce que vous avez vu au chapitre précédent).
Comment établir une connexion entre une application web c# et LDAP de l'Active Directory ?
Il vous faut donc juste changer la valeur du filtre de recherche, et utiliser la méthode FindOne(), plutôt que FindAll(), étant donné que l'on part du principe que vous ne voulez modifier les informations que d'un utilisateur.
Comment établir une connexion entre une application web c# et LDAP de l'Active Directory ?
Reprenons donc notre code :
Explications du code :
On commence par se connecter à l'annuaire LDAP. Ensuite, on utilise un objet DirectorySearcher sur lequel on applique le filtre adéquat : on ne veut que le user dont le login est TEST, donc dont SAMAccountName=TEST.
Comment établir une connexion entre une application web c# et LDAP de l'Active Directory ?
On lance ensuite la recherche.
Une fois que l'on a trouvé le premier objet correspondant, on le récupère, puis on peut modifier son/ses attributs.
Comment établir une connexion entre une application web c# et LDAP de l'Active Directory ?
Enfin, l'appel à CommitChanges() permet d'envoyer les changements au serveur Active Directory.
Comment établir une connexion entre une application web c# et LDAP de l'Active Directory ?
Il vous faut donc juste changer la valeur du filtre de recherche, et utiliser la méthode FindOne(), plutôt que FindAll(), étant donné que l'on part du principe que vous ne voulez modifier les informations que d'un utilisateur.
Comment établir une connexion entre une application web c# et LDAP de l'Active Directory ?
Reprenons donc notre code :
Modifier un utilisateur
Sélectionnez
//
Connexion
à
l'annuaire
DirectoryEntry Ldap =
new DirectoryEntry
("
LDAP://votre-nom-AD
"
, "
Login
"
, "
Password
"
);
//
Nouvel
objet
pour
instancier
la
recherche
DirectorySearcher searcher =
new DirectorySearcher
(Ldap);
//
On
modifie
le
filtre
pour
ne
chercher
que
l'user
dont
le
nom
de
login
est
TEST
searcher.Filter =
"
(SAMAccountName=TEST)
"
;
//
Pas
de
boucle
foreach
car
on
ne
cherche
qu'un
user
SearchResult result =
searcher.FindOne
();
//
On
récupère
l'objet
trouvé
lors
de
la
recherche
DirectoryEntry DirEntry =
result.GetDirectoryEntry
();
//
On
modifie
la
propriété
description
de
l'utilisateur
TEST
DirEntry.Properties["
description
"
].Value =
"
Nouvelle
description
pour
TEST
"
;
//
Et
son
numéro
de
téléphone
DirEntry.Properties["
TelephoneNumber
"
].Value =
"
0123456789
"
;
//
On
envoie
les
changements
à
Active
Directory
DirEntry.CommitChanges
();
Explications du code :
On commence par se connecter à l'annuaire LDAP. Ensuite, on utilise un objet DirectorySearcher sur lequel on applique le filtre adéquat : on ne veut que le user dont le login est TEST, donc dont SAMAccountName=TEST.
Comment établir une connexion entre une application web c# et LDAP de l'Active Directory ?
On lance ensuite la recherche.
Une fois que l'on a trouvé le premier objet correspondant, on le récupère, puis on peut modifier son/ses attributs.
Comment établir une connexion entre une application web c# et LDAP de l'Active Directory ?
Enfin, l'appel à CommitChanges() permet d'envoyer les changements au serveur Active Directory.
Ajout d'un utilisateur
Pour ajouter un utilisateur, c'est un peu le même principe :
Voyons donc ce que cela donne en matière de code :
Explications du code :
Comment établir une connexion entre une application web c# et LDAP de l'Active Directory ?
Ici, nous nous connectons à l'annuaire Active Directory, puis nous indiquons que nous allons ajouter un nœud enfant au moyen de Children.Add, qui prend en paramètre :
Ensuite, nous définissons les propriétés de l'utilisateur, au moyen de la méthode Add : son nom de login (SAMAccountName), son nom, son prénom et sa description.
Bien sûr, vous pouvez tout à fait renseigner d'autres propriétés, toujours en vous servant de la liste que vous trouverez ici :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/adschema/adschema/c_user.asp
Une fois cela fait, nous appelons CommitChanges(), afin de renvoyer les modifications (dans notre cas, il s'agit d'un ajout) au serveur.
Puis, nous utilisons la méthode Invoke, pour définir le mot de passe de l'utilisateur. Avant de pouvoir utiliser cette méthode, nous devons nous assurer que l'utilisateur existe bien dans l'AD, d'où le précédent appel à CommitChanges().
Enfin, nous définissons le type de compte que nous désirons, au moyen de la propriété userAccountControl : nous voulons un simple compte, donc il faut employer la constante adéquate.
Voici la liste des constantes :
Vous pouvez retrouver cette liste (ainsi que des exemples) ici :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/mmsdev/mms/example__enabling_or_disabling_a_user_account_in_active_directory.asp
Pour finir, un dernier appel à CommitChanges() permet d'envoyer au serveur les dernières modifications/ajouts apportés à l'utilisateur.
Comment établir une connexion entre une application web c# et LDAP de l'Active Directory ?
Voilà, vous venez de créer avec succès l'utilisateur Test User dont le nom de login est testuser et dont les propriétés sont celles que vous avez définies plus haut.
- connexion à l'Active Directory ;
- création d'un nouvel objet ;
- définition des propriétés de l'objet ;
- envoi des changements au serveur.
Voyons donc ce que cela donne en matière de code :
Ajout d'un utilisateur
Sélectionnez
//
Connexion
à
l'annuaire
DirectoryEntry Ldap =
new DirectoryEntry
("
LDAP://votre-nom-AD
"
, "
Login
"
, "
Password
"
);
//
Création
du
user
Test
User
et
initialisation
de
ses
propriétés
DirectoryEntry user =
Ldap.Children.Add
("
cn=Test
User
"
, "
user
"
);
user.Properties["
SAMAccountName
"
].Add
("
testuser
"
);
user.Properties["
sn
"
].Add
("
User
"
);
user.Properties["
givenName
"
].Add
("
Test
"
);
user.Properties["
description
"
].Add
("
Compte
de
test
créé
par
le
code
"
);
//
On
envoie
les
modifications
au
serveur
user.CommitChanges
();
//
On
va
maintenant
lui
définir
son
password.
L'utilisateur
doit
avoir
été
créé
//
et
sauvé
avant
de
pouvoir
faire
cette
étape
user.Invoke
("
SetPassword
"
, new object [] {
"
motdepasse
"
}
);
//
On
va
maintenant
activer
le
compte
:
ADS_UF_NORMAL_ACCOUNT
user.Properties["
userAccountControl
"
].Value =
0x0200
;
//
On
envoie
les
modifications
au
serveur
user.CommitChanges
();
Explications du code :
Comment établir une connexion entre une application web c# et LDAP de l'Active Directory ?
Ici, nous nous connectons à l'annuaire Active Directory, puis nous indiquons que nous allons ajouter un nœud enfant au moyen de Children.Add, qui prend en paramètre :
- le nom de la nouvelle entrée ;
- le schéma (type) de la nouvelle entrée. Dans notre cas, c'est un utilisateur, donc user en anglais.
Ensuite, nous définissons les propriétés de l'utilisateur, au moyen de la méthode Add : son nom de login (SAMAccountName), son nom, son prénom et sa description.
Bien sûr, vous pouvez tout à fait renseigner d'autres propriétés, toujours en vous servant de la liste que vous trouverez ici :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/adschema/adschema/c_user.asp
Une fois cela fait, nous appelons CommitChanges(), afin de renvoyer les modifications (dans notre cas, il s'agit d'un ajout) au serveur.
Puis, nous utilisons la méthode Invoke, pour définir le mot de passe de l'utilisateur. Avant de pouvoir utiliser cette méthode, nous devons nous assurer que l'utilisateur existe bien dans l'AD, d'où le précédent appel à CommitChanges().
Enfin, nous définissons le type de compte que nous désirons, au moyen de la propriété userAccountControl : nous voulons un simple compte, donc il faut employer la constante adéquate.
Voici la liste des constantes :
Valeur | Effet |
const long ADS_UF_SCRIPT = 0x0001; | Le script de démarrage sera exécuté |
const long ADS_UF_ACCOUNTDISABLE = 0x0002; | Désactiver le compte |
const long ADS_UF_HOMEDIR_REQUIRED = 0x0008; | Nécessite un répertoire racine |
const long ADS_UF_LOCKOUT = 0x0010; | Le compte est verrouillé |
const long ADS_UF_PASSWD_NOTREQD = 0x0020; | Aucun mot de passe nécessaire |
const long ADS_UF_PASSWD_CANT_CHANGE = 0x0040; | L'utilisateur ne peut pas changer de mot de passe |
const long ADS_UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED = 0x0080; | Cryptage du mpd autorisé |
const long ADS_UF_TEMP_DUPLICATE_ACCOUNT = 0x0100; | Compte d'utilisateur local |
const long ADS_UF_NORMAL_ACCOUNT = 0x0200; | Compte classique |
Vous pouvez retrouver cette liste (ainsi que des exemples) ici :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/mmsdev/mms/example__enabling_or_disabling_a_user_account_in_active_directory.asp
Pour finir, un dernier appel à CommitChanges() permet d'envoyer au serveur les dernières modifications/ajouts apportés à l'utilisateur.
Comment établir une connexion entre une application web c# et LDAP de l'Active Directory ?
Voilà, vous venez de créer avec succès l'utilisateur Test User dont le nom de login est testuser et dont les propriétés sont celles que vous avez définies plus haut.
Comment établir une connexion entre une application web c# et LDAP de l'Active Directory ?
Reviewed by Badr Dev
on
13:22
Rating:
Aucun commentaire: