我们的机构有一个大型LDAP系统,我们可以通过端口636上的LDAPS访问。我正在尝试为此LDAP创建一个IQueryable接口,该接口映射到现有的People实体但遇到了麻烦。
我提到了上面的内容所以人们知道我的最终目标,但是如果有人可以帮助我简单地对这个非AD LDAP运行成功的查询,即使它在IQueryable领域之外,我今天也会感到满意。这是我到目前为止(我已经编辑了密码,uid和ou的安全性):
var url = @"ldaps://ldap.ucdavis.edu:636/uid=s1,ou=s2,dc=ucdavis,dc=edu";
var password = @"something";
DirectoryEntry entry = new DirectoryEntry(url);
entry.Password = password;
entry.AuthenticationType = AuthenticationTypes.Secure;
DirectorySearcher mySearcher = new DirectorySearcher(entry);
SearchResultCollection results;
results = mySearcher.FindAll();
foreach(SearchResult resEnt in results) {
ResultPropertyCollection propcoll = resEnt.Properties;
foreach (string key in propcoll.PropertyNames)
{
foreach (object values in propcoll[key])
{
switch (key)
{
case "sn":
//sb.Append(key.ToString() + "<surname>"
//+ values.ToString() + "</surname>");
break;
case "cn":
//sb.Append(key.ToString() + "<cn>"
//+ values.ToString() + "</cn>");
break;
case "name":
//sb.Append(key.ToString() + "<name>"
//+ values.ToString() + "</name>");
break;
}
}
}
}
但我在mySearcher.FindAll()行上不断收到“未知错误”。有人在这看到一个明显的问题吗?我是否正确指定了ou和uid?
答案 0 :(得分:2)
&gt;在这里看到一个明显的问题?
搜索查询本身在哪里?
DirectorySearcher(entry);
根据您的基本路径初始化搜索者。
尝试将“filter”属性设置为有效的LDAP搜索字符串,例如“(objectClass = inetOrgPerson)”。
另外,尝试将SearchScope设置为OneLevel。
无论如何,我认为这不会有所帮助。
AFAIK DirectorySearcher仅仅是ADSI的包装器。您应该使用的是System.DirectoryServices.Protocols命名空间中的类,请参阅此文章:http://msdn.microsoft.com/en-us/library/bb332056.aspx
答案 1 :(得分:0)
我想知道LDAP DN是否正确? AD使用dc = acme,dc = com,但其他LDAP服务器可能使用ou = ucdavis,o = edu。