如何通过C#中的LDAPS连接到Active Directory?

时间:2016-01-15 14:43:18

标签: c# active-directory ldap

在此网站的答案帖子中找到了一份文档(here),但我无法与AD建立连接。当我使用像Active Directory资源管理器的程序,我可以连接。我想,因为我想连接到LDAPS,我需要一种不同的方法吗?

我有服务器IP,域名,用户名/密码和端口636。 我尝试了各种组合@ new DirectoryEntry,但无法连接它。始终获得COMException Domain is not existing

    static DirectoryEntry createDirectoryEntry()
    {
        DirectoryEntry ldapConnection = new DirectoryEntry("LDAP://192.168.2.59", USER, PWD);

        ldapConnection.AuthenticationType = AuthenticationTypes.SecureSocketsLayer;

        return ldapConnection;
    }            

背景信息: 用户将其卡片放入读卡器单元。 Porgram从卡中获取ID并在DB中搜索此ID并返回属于ID / User的eMail地址 。 这是工作解决方案:

        private string getEmail(string userID)
    {
        try
        {
            string ldapfilter = "(&(otherPager=" + userID + "))";

            DirectoryEntry myLdapConnection = new DirectoryEntry("LDAP://" + SERVER, USER, PWD);
            DirectorySearcher search = new DirectorySearcher(myLdapConnection);
            search.Filter = ldapfilter;

            /*search.PropertiesToLoad.Add("mail");
            SearchResult result = search.FindOne();*/

            string[] requiredValue = new String[] { "mail" };

            foreach (String value in requiredValue)
                search.PropertiesToLoad.Add(value);

            SearchResult result = search.FindOne();

            if (result != null)
            {
                foreach (String value in requiredValue)
                    foreach (Object myCollection in result.Properties[value])
                    {
                       return myCollection.ToString();
                    }    
            }
            else
            {
                return "No Entry fround";
            }
        }
        catch (Exception e)
        {
            Console.WriteLine("Exception Problem: " + e.ToString());
            return null;
        }
        return null;
    }



    private void cmdClose_Click(object sender, EventArgs e)
    {
        Close();
    }

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        label1.Text = getEmail(textBox1.Text);
    }

1 个答案:

答案 0 :(得分:2)

您需要指定端口,因为636是默认的LDAPS端口。

new DirectoryEntry("LDAP://192.168.2.59:636", USER, PWD)

我在我的一些代码中执行此操作,使用“LDAP://”(而不是“LDAPS://”)是有效的。

如果这不起作用,则可能存在证书错误。您可以使用浏览器进行测试。如果您使用Chrome,请使用此功能打开Chrome(因此可以使用端口636):

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --explicitly-allowed-ports=636

然后转到https://192.168.2.59:636。如果您得到一个很大的花哨证书错误,那么问题是该证书不受信任。查看Chrome中的证书,看看问题所在。它可以由不在Windows证书库中的权限颁发。