web-dev-qa-db-fra.com

Se connecter à Active Directory via LDAP

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?

43
Waren Schild

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:

  • com
    • exemple
      • Utilisateurs
        • Tous les utilisateurs
          • Utilisateurs spécifiques

É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();
}
82
The-First-Tiger

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

Introduction à LDAP

2
s.lenders

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 + ")";
    ....    
1
Pavan