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

Jon*_*sie 0 .net c# 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");
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

有没有人有什么建议?

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

干杯

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

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

Jon*_*sie 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");
Run Code Online (Sandbox Code Playgroud)

干杯

PS:一个更有用的错误信息会让我节省一天的时间!