需要澄清有关 PrincipalContext 安全权限和 PrincipalContext 的 ContextType.Machine
Clarification required about PrincipalContext security permissions and PrincipalContext's ContextType.Machine
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 构造函数中传递的用户名(帐户)所在的域与目标域(要查询的域)不信任,我会收到以下错误.
System.DirectoryServices.AccountManagement.PrincipalServerDownException: The server could not be contacted. ---> System.DirectoryServices.Protocols.LdapException: The LDAP server is unavailable.
如果 PrincipalContext 构造更改为
,我的假设是否正确?
using (PrincipalContext ctx = new PrincipalContext(ContextType.Machine))
只要客户端在目标域中,代码就会成功执行?
假设第一个带有用户名和密码的代码被域 A 中的客户端调用,试图在域 B 中搜索用户信息,这里建立上下文失败,因为所使用的帐户位于域 A 中,与域不信任B.
如果我将 ContextType 更改为 Machine,并且调用代码的客户端在域 B 中,代码将成功执行,我的假设是否正确?
不,这不是一个正确的假设。 ContextType.Machine
表示您想使用本地帐户。
您的 PrincipalSearcher
将最终搜索本地 SAM 数据库而不是 Active Directory
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 构造函数中传递的用户名(帐户)所在的域与目标域(要查询的域)不信任,我会收到以下错误.
System.DirectoryServices.AccountManagement.PrincipalServerDownException: The server could not be contacted. ---> System.DirectoryServices.Protocols.LdapException: The LDAP server is unavailable.
如果 PrincipalContext 构造更改为
,我的假设是否正确? using (PrincipalContext ctx = new PrincipalContext(ContextType.Machine))
只要客户端在目标域中,代码就会成功执行?
假设第一个带有用户名和密码的代码被域 A 中的客户端调用,试图在域 B 中搜索用户信息,这里建立上下文失败,因为所使用的帐户位于域 A 中,与域不信任B.
如果我将 ContextType 更改为 Machine,并且调用代码的客户端在域 B 中,代码将成功执行,我的假设是否正确?
不,这不是一个正确的假设。 ContextType.Machine
表示您想使用本地帐户。
您的 PrincipalSearcher
将最终搜索本地 SAM 数据库而不是 Active Directory