Je souhaite me connecter à notre annuaire Active Directory local en C #.
J'ai trouvé cette bonne documentation .
Mais je ne comprends vraiment pas comment me connecter via LDAP.
Quelqu'un d’entre vous peut-il expliquer comment utiliser les paramètres demandés?
Exemple de code:
static DirectoryEntry createDirectoryEntry()
{
// create and return new LDAP connection with desired settings
DirectoryEntry ldapConnection = new DirectoryEntry("rizzo.leeds-art.ac.uk");
ldapConnection.Path = "LDAP://OU=staffusers,DC=leeds-art,DC=ac,DC=uk";
ldapConnection.AuthenticationType = AuthenticationTypes.Secure;
return ldapConnection;
}
Je viens d'avoir le nom d'hôte et l'adresse IP de notre serveur Active Directory. Qu'est-ce que DC=xxx,DC=xx
et ainsi de suite?
DC est votre domaine. Si vous souhaitez vous connecter au domaine example.com, vos dc sont: DC = exemple, DC = com
En fait, vous n'avez besoin d'aucun nom d'hôte ou adresse IP de votre contrôleur de domaine (il pourrait y en avoir beaucoup).
Imaginez que vous vous connectez au domaine lui-même. Donc, pour vous connecter au domaine example.com, vous pouvez simplement écrire
DirectoryEntry directoryEntry = new DirectoryEntry("LDAP://example.com");
Et tu as fini.
Vous pouvez également spécifier un utilisateur et un mot de passe pour vous connecter:
DirectoryEntry directoryEntry = new DirectoryEntry("LDAP://example.com", "username", "password");
Veillez également à toujours écrire LDAP en majuscule. J'ai eu quelques problèmes et des exceptions étranges jusqu'à ce que je lise quelque part que je devrais essayer de l'écrire en majuscule et que cela résolve mes problèmes.
Le directoryEntry.Path
Property vous permet de plonger plus profondément dans votre domaine. Ainsi, si vous souhaitez rechercher un utilisateur dans une unité d'organisation spécifique, vous pouvez le définir à cet emplacement.
DirectoryEntry directoryEntry = new DirectoryEntry("LDAP://example.com");
directoryEntry.Path = "LDAP://OU=Specific Users,OU=All Users,OU=Users,DC=example,DC=com";
Cela correspond à la hiérarchie AD suivante:
Écrivez simplement la hiérarchie du plus profond au plus élevé.
Maintenant vous pouvez faire plein de choses
Par exemple, recherchez un utilisateur par nom de compte et obtenez le nom de l'utilisateur:
DirectoryEntry directoryEntry = new DirectoryEntry("LDAP://example.com");
DirectorySearcher searcher = new DirectorySearcher(directoryEntry) {
PageSize = int.MaxValue,
Filter = "(&(objectCategory=person)(objectClass=user)(sAMAccountName=AnAccountName))"
};
searcher.PropertiesToLoad.Add("sn");
var result = searcher.FindOne();
if (result == null) {
return; // Or whatever you need to do in this case
}
string surname;
if (result.Properties.Contains("sn")) {
surname = result.Properties["sn"][0].ToString();
}
ldapConnection est l'adresse du serveur: ldap.example.com. Ldap.Connection.Path est le chemin à l'intérieur de l'ADS que vous souhaitez utiliser, insérez-le au format LDAP.
OU = Votre_OU, OU = autre_ou, dc = exemple, dc = com
Vous commencez au niveau de l'unité d'organisation la plus profonde à la racine de l'AD, puis ajoutez dc = X pour chaque section de domaine jusqu'à ce que vous ayez tout, y compris le domaine de niveau supérieur.
Maintenant, je manque un paramètre pour authentifier, cela fonctionne de la même manière que le chemin d'accès pour le nom d'utilisateur
CN = nom d'utilisateur, OU = utilisateurs, DC = exemple, DC = com
Si votre adresse électronique est '[email protected]', essayez de modifier le paramètre createDirectoryEntry () comme ci-dessous.
XYZ est un paramètre facultatif s'il existe dans le répertoire mydomain
static DirectoryEntry createDirectoryEntry()
{
// create and return new LDAP connection with desired settings
DirectoryEntry ldapConnection = new DirectoryEntry("myname.mydomain.com");
ldapConnection.Path = "LDAP://OU=Users, OU=XYZ,DC=mydomain,DC=com";
ldapConnection.AuthenticationType = AuthenticationTypes.Secure;
return ldapConnection;
}
Cela va essentiellement vérifier com -> mydomain -> XYZ -> Utilisateurs -> abcd
La fonction principale ressemble à ce qui suit:
try
{
username = "Firstname LastName"
DirectoryEntry myLdapConnection = createDirectoryEntry();
DirectorySearcher search = new DirectorySearcher(myLdapConnection);
search.Filter = "(cn=" + username + ")";
....