Connect to Active Directory via LDAP

前端 未结 3 1235
花落未央
花落未央 2020-11-28 22:43

I want to connect to our local Active Directory with C#.

I\'ve found this good documentation.

But I really don\'t get how to connect via LDAP.

Can so

相关标签:
3条回答
  • 2020-11-28 23:01

    If your email address is 'myname@mydomain.com', try changing the createDirectoryEntry() as below.

    XYZ is an optional parameter if it exists in mydomain directory

    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;
    }
    

    This will basically check for com -> mydomain -> XYZ -> Users -> abcd

    The main function looks as below:

    try
    {
        username = "Firstname LastName"
        DirectoryEntry myLdapConnection = createDirectoryEntry();
        DirectorySearcher search = new DirectorySearcher(myLdapConnection);
        search.Filter = "(cn=" + username + ")";
        ....    
    
    0 讨论(0)
  • 2020-11-28 23:02

    DC is your domain. If you want to connect to the domain example.com than your dc's are: DC=example,DC=com

    You actually don't need any hostname or ip address of your domain controller (There could be plenty of them).

    Just imagine that you're connecting to the domain itself. So for connecting to the domain example.com you can simply write

    DirectoryEntry directoryEntry = new DirectoryEntry("LDAP://example.com");
    

    And you're done.

    You can also specify a user and a password used to connect:

    DirectoryEntry directoryEntry = new DirectoryEntry("LDAP://example.com", "username", "password");
    

    Also be sure to always write LDAP in upper case. I had some trouble and strange exceptions until I read somewhere that I should try to write it in upper case and that solved my problems.

    The directoryEntry.Path Property allows you to dive deeper into your domain. So if you want to search a user in a specific OU (Organizational Unit) you can set it there.

    DirectoryEntry directoryEntry = new DirectoryEntry("LDAP://example.com");
    directoryEntry.Path = "LDAP://OU=Specific Users,OU=All Users,OU=Users,DC=example,DC=com";
    

    This would match the following AD hierarchy:

    • com
      • example
        • Users
          • All Users
            • Specific Users

    Simply write the hierarchy from deepest to highest.

    Now you can do plenty of things

    For example search a user by account name and get the user's surname:

    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();
    }
    
    0 讨论(0)
  • 2020-11-28 23:04

    ldapConnection is the server adres: ldap.example.com Ldap.Connection.Path is the path inside the ADS that you like to use insert in LDAP format.

    OU=Your_OU,OU=other_ou,dc=example,dc=com

    You start at the deepest OU working back to the root of the AD, then add dc=X for every domain section until you have everything including the top level domain

    Now i miss a parameter to authenticate, this works the same as the path for the username

    CN=username,OU=users,DC=example,DC=com

    Introduction to LDAP

    0 讨论(0)
提交回复
热议问题