通过PrincipalContext跨域登录

时间:2017-10-18 12:13:23

标签: c# active-directory

我有一个奇怪的问题。我想检查用户和密码在2个信任域名上有效。

List<string> definedDomains = new List<string>();
definedDomains.Add("DomainA");
definedDomains.Add("DomainB");

bool isValid = false;

foreach (string domain in definedDomains)
{
    using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, domain))
    {
        isValid = pc.ValidateCredentials("userB", "password");

这里有一个很奇怪的部分:在DomainA上,UserB和有效密码ValidateCredentials返回true。后来

PrincipalContext yourDomain = new PrincipalContext(ContextType.Domain, domain);
UserPrincipal userPrincipal = UserPrincipal.FindByIdentity(yourDomain, "UserB");

FindByIdentity方法返回null。

如何仅在一个域中验证?

1 个答案:

答案 0 :(得分:0)

您可以验证跨域凭据,因为指定的域会将查询转发到用户的域,但您无法从不包含该用户的域加载主体信息。

PrincipalContext定义FindByIdentity将搜索的边界。这可以是整个域,域中的特定OU,但您无法在上下文之外找到结果。