1

我在我的 ASP 项目中使用 C# 访问 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;
        }


    }
}
4

2 回答 2

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))"

稍后再添加用户过滤器。

于 2012-09-08T06:43:12.307 回答
1

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

于 2012-09-08T06:46:03.703 回答