我正在使用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;
}
}
}
答案 0 :(得分:2)
我不是大师,但有些想法:
LDAP连接字符串看起来不正确 - 我原以为它看起来更像LDAP://MyADServer:389/CN=SomeStore,OU=Users,OU=Network Users,DC=domain,DC=org
您可能需要加载一些属性,例如
string[] propertiesToLoad = new string[] { "DistinguishedName", "mail" } ;
...
deSearch.PropertiesToLoad = propertiesToLoad;
可能首先在没有用户名过滤器的情况下尝试获取数据,看看连接是否正常,即
deSearch.Filter = "(&(objectClass=user))"
稍后再添加用户过滤器。
答案 1 :(得分:1)
如果您在搜索Active Directory中的实体时遇到问题,请考虑使用ldp等工具。您可以使用它来检查路径是否正确,对象是否存在等等。