使用管理员凭据通过C#代码访问某些属性时出现LDAP错误(0x8000500c)

时间:2014-07-26 16:52:39

标签: c# .net ldap directoryservices

我正在尝试使用C#和.NET库“System.DirectoryServices”从LDAP(而非AD)条目中读取属性。

我的LDAP条目如下:

dn: uid=foo,ou=People,dc=companyname,dc=local
objectClass: posixAccount
objectClass: top
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
gidNumber: 0
givenName: Foo
sn: Bar
displayName: Foo Bar
uid: foo
homeDirectory: /
cn: foo bar
uidNumber: 9846
userPassword: {SHA}Ys23Ag/5IOWqZCw9QGaVDdHwH00=
mail: foo@dodo.net

我使用的Linux LDAP服务器是“389”,也称为“Fedora Directory Server”。我的C#代码如下所示:

string value = null;
DirectoryEntry ouEntry = null;
string path = "LDAP://192.168.150.192/ou=People, dc=companyname, dc=local";
string adminUserName = "cn=Directory Manager";
string adminPassword = "supersecureadminpassword";
ouEntry = new DirectoryEntry(path, adminUserName, adminPassword, AuthenticationTypes.None);
DirectorySearcher searcher = new DirectorySearcher(ouEntry, "uid=foo");
SearchResult result = searcher.FindOne();
DirectoryEntry userEntry = result.GetDirectoryEntry();
var props = userEntry.Properties.PropertyNames;
if(userEntry.Properties.Contains("givenName"))
    value = userEntry.Properties["givenName"].Value.ToString();

代码完美无缺。但是,如果我将“givenName”替换为“displayName”,则代码会在if(userEntry.Properties.Contains("displayName"))System.Runtime.InteropServices.COMException: Unknown error (0x8000500c)上失败。 即使在检查属性列表props时显示属性“displayName”,也会发生这种情况。

我已阅读this post,因为它似乎是一个类似的问题。但是,我不知道如何解决问题,因为我所拥有的只是一个静态IP地址,而不是我的LDAP服务器的完全限定名称。

有谁知道我的代码中的问题是什么,以及它是否与上述帖子有关?我该如何解决这个问题呢?

提前多多感谢。

更新1: 我也尝试用LDAP服务器的Linux主机名(shell命令hostname的输出)替换IP地址,但这也不起作用。另外,据我所知,“displayName”不是自定义属性。因此,我的问题可能与链接帖子中的问题不匹配。 我真的很绝望,不知道该怎么办。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

少数事情:

  1. adminUserName是一个登录名,例如" jsmith的"不是" cn = ..."
  2. 如果您的信箱在同一个域中,那么通常您不需要指定用户/密码
  3. 确保uid(uid = foo)是正确的属性
  4. 尝试使用PropertiesToLoad

    DirectorySearcher searcher = new DirectorySearcher(ouEntry, ...);
    searcher.PropertiesToLoad.Add("displayName");
    
  5. 虽然您说它适用于" givenName",但您可能会尝试测试第三方工具以检查您的连接是否存在问题。例如。您可以尝试LDAP Browser,尝试提供相同的连接数据并搜索您的过滤字符串,看看它是否返回所有必需的数据。