没有正确理解LDAP DirectoryEntry

时间:2012-09-08 06:18:58

标签: c# asp-classic directoryservices

我正在使用C#和我的ASP项目访问LDAP。这是一个非常简单的例子,只是检查我的目录服务中是否存在用户。

这是代码。 UserExists()函数返回false

我不完全确定我的LDAP查询是否甚至是我的目录服务。 (活动目录)

using System.DirectoryServices;

namespace UserManagement
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (UserExists("abc"))
                lblUserExists.Text = "Found Username";
        }

        public static DirectoryEntry GetDirectoryEntry()
        {
            DirectoryEntry de = new DirectoryEntry();
            de.Path = "LDAP://OU=Users,OU=Network Users,DC=domain,DC=org";
            de.AuthenticationType = AuthenticationTypes.Secure;

            return de;
        }

        public bool UserExists(String UserName)
        {
            DirectoryEntry de = GetDirectoryEntry();
            DirectorySearcher deSearch = new DirectorySearcher();

            deSearch.SearchRoot = de;
            deSearch.Filter = "(&(objectClass=user) (cn=" + UserName + "))";

            SearchResultCollection results = deSearch.FindAll();
            return results.Count > 0;
        }


    }
}

2 个答案:

答案 0 :(得分:2)

我不是大师,但有些想法:

  1. LDAP连接字符串看起来不正确 - 我原以为它看起来更像LDAP://MyADServer:389/CN=SomeStore,OU=Users,OU=Network Users,DC=domain,DC=org

  2. 您可能需要加载一些属性,例如

    string[] propertiesToLoad = new string[] { "DistinguishedName", "mail" } ;  ...  deSearch.PropertiesToLoad = propertiesToLoad;

  3. 可能首先在没有用户名过滤器的情况下尝试获取数据,看看连接是否正常,即

    deSearch.Filter = "(&(objectClass=user))"

  4. 稍后再添加用户过滤器。

答案 1 :(得分:1)

如果您在搜索Active Directory中的实体时遇到问题,请考虑使用ldp等工具。您可以使用它来检查路径是否正确,对象是否存在等等。