如何在LDAP服务器上查找用户

时间:2010-09-09 12:31:27

标签: c# ldap

尝试在LDAP服务器上查找用户时,出现以下错误“未知错误(0x8000500c)”

这是我正在使用的代码:

PrincipalContext domainContext = new PrincipalContext(ContextType.Domain, "gandalf.intrafg");
UserPrincipal p = UserPrincipal.FindByIdentity(domainContext, IdentityType.SamAccountName, "Consultor1");

偶然地,下面的代码似乎有效(没有生成异常),但samAccountName作为字节数组出现。谁知道为什么?

DirectoryEntry entry = new DirectoryEntry("LDAP://gandalf.intrafg");

DirectorySearcher searcher = new DirectorySearcher(entry);

//searcher.PropertiesToLoad.Add("givenName");
//searcher.PropertiesToLoad.Add("sn");
searcher.PropertiesToLoad.Add("samAccountName");

searcher.Filter = "(&(objectCategory=person)(samAccountName=Consultor1))";

SearchResult result = searcher.FindOne();

2 个答案:

答案 0 :(得分:0)

您的第二个代码块工作得很好,但是在DirectoryEntry初始化程序中传递了域名。

    Directory entry = new DirectoryEntry();
//other code
result.Properties["samAccountName"][0].ToString();

答案 1 :(得分:0)

你拥有的代码应该没问题 - 它对我有用,完全没问题。

但是:您没有告诉我们您在domain_name填写的内容:

PrincipalContext domainContext = new PrincipalContext(ContextType.Domain, "domain_name");

userId此处:

UserPrincipal p = UserPrincipal.FindByIdentity(domainContext, IdentityType.SamAccountName, UserId);

domain_name 必须采用“旧”NetBIOS样式,例如FABRIKAM - 没有类似fabrikam.com的DNS样式或dc=fabrikom,dc=com等AD样式,甚至没有完整的LDAP路径。

userId必须是有效的SAM帐户名称,例如最大。只有20个字符,字母和数字(除了一些有效的特殊字符)。

您是否遵守这些要求?