无法使用System.DirectoryServices.AccountManagement查找用户或组

时间:2011-08-17 21:04:24

标签: c# .net active-directory

我正在尝试使用System.DirectoryServices.AccountManagement内容将系统与Active Directory集成。我们的IT人员设置了一个AD框,我的开发框不属于这个(或任何)域。

到目前为止,我有3行代码作为测试:

  var pc = new PrincipalContext(ContextType.Domain, "machine", "CN=Administrator,CN=Users,DC=domain,DC=com", "Password");

  var user = UserPrincipal.FindByIdentity(pc, IdentityType.SamAccountName, "Administrator");

  var gp = GroupPrincipal.FindByIdentity(pc, IdentityType.SamAccountName,  "Admins");

创建PrincipalContext的工作原理如上所示,但如果我尝试使用域名而不是服务器名称,则会收到错误:无法联系服务器。所以,我把它留在机器名称上。

获取用户或组时,出现错误:发生了本地错误。

对于用户,我也尝试了相同的结果:

var user = UserPrincipal.FindByIdentity(pc, IdentityType.DistinguishedName, "cn=Administrator,ou=users,dc=domain,dc=com");

所以,总的来说,我很困惑:(

有人有任何建议吗?

作为旁注,我想踢那些认为“发生了本地错误”的程序员,这将是一个有用的错误消息!

干杯

PS:我可以在我的机器上使用SysInternals AD Explorer,我可以看到我正在尝试使用的dn。

PPS:如果我在创建PrincipalContext时使用machine.domain.com作为名称,它也无法连接。

2 个答案:

答案 0 :(得分:5)

所以这是在您解决问题之后完全有意义的事情之一。问题是Context正在尝试使用未配置的Negotiated安全上下文。当我使用SimpleBind时它工作得很好:

    var pc = new PrincipalContext(ContextType.Domain, "machine", "DC=domain,DC=com", ContextOptions.SimpleBind, "CN=Administrator,CN=Users,DC=domain,DC=com", "Password");

干杯

PS:更有用的错误信息会让我感到头疼!

答案 1 :(得分:1)

要使用当前用户的凭据进行搜索,请指定域:

new PrincipalContext(ContextType.Domain, "xyz.mycorp.com:3268", "DC=mycorp,DC=com");

When do I need a Domain Name and a Domain Container to create a PrincipalContext?