需要澄清PrincipalContext安全权限和PrincipalContext的ContextType.Machine

时间:2015-05-18 09:20:29

标签: asp.net-mvc c#-4.0 active-directory directoryservices principalcontext

using (PrincipalContext Context = new PrincipalContext(ContextType.Domain, DomainURL, UserName, Password))
{
   UserPrincipal Account = new UserPrincipal(Context);
   Account.GivenName = strFirstName;
   Account.Surname = strLastName;

   PrincipalSearcher srch = new PrincipalSearcher(Account);
   foreach (var principal in srch.FindAll())
     {
        var p = (UserPrincipal)principal;
        String FirstName = p.GivenName;
        String LastName = p.Surname;
     }            
}

如果我使用上面的代码查询Active Directory,并且PrincipalContext构造函数中传递的UserName(帐户)位于与目标域(要查询的域)不相信的域中,则会出现以下错误。< / p>

  

System.DirectoryServices.AccountManagement.PrincipalServerDownException:无法联系服务器。 ---&GT; System.DirectoryServices.Protocols.LdapException:LDAP服务器不可用。

假设PrincipalContext结构更改为

,我是否正确?
 using (PrincipalContext ctx = new PrincipalContext(ContextType.Machine))

只要客户端在目标域中,代码就会成功执行吗?

让我们假设第一个带有UserName和Password的代码由域A中的客户端调用,试图在域B中搜索用户信息,这里建立的上下文失败,因为所使用的帐户位于域B中,不信任域B.

我是否正确假设如果我将ContextType更改为Machine,并且调用代码的客户端在域B中,则代码将成功执行?

1 个答案:

答案 0 :(得分:0)

不,这不是一个正确的假设。 ContextType.Machine表示您希望使用本地帐户。

您的PrincipalSearcher将最终搜索本地SAM数据库而不是Active Directory