指定不正确的容器不会影响用户搜索



我使用用户PrincipalContext类连接到Active Directory服务器,然后使用ValidateCredentials方法,如下所示:

new PrincipalContext(ContextType.Domain, <some url>, <some container>);
principalContext.ValidateCredentials(userName, password, ContextOptions.Negotiate);

some container参数是container类型;所有查询都在这个根"下执行;。同样根据指定容器"…"的这个答案;。。。将使用该DomainContext的所有查询限制为指定的容器">

然而,问题是,对于我公司的AD服务器,如果我指定了一个不存在的容器或只是胡言乱语,那么如果我指定的用户具有正确的密码,AD服务器仍然会找到一个用户。有人知道为什么用户仍然被找到吗?你能给我一些文件来解释这一点吗?

简单的答案是ValidateCredentials不使用指定的容器,只是因为它不需要。它实际上并不搜索用户。它只是尝试使用指定的凭据对服务器进行身份验证。

您可以在这里看到ValidateCredentials的源代码,它最终调用CredentialValidator.Validate(一个内部类(。

PrincipalContext的构造函数中,它创建了CredentialValidator对象,但您会注意到它没有将container传递给它,只将name(域名(传递给它。

_credValidate = new CredentialValidator(contextType, name, _serverProperties);

_serverProperties变量也是仅根据服务器名称构建的,而不是容器,这可以从ReadServerConfig方法中看到。

最新更新