我正在尝试使用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作为名称,它也无法连接。
答案 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?