使用`ValidateCredentials(null,null)`测试`PrincipalContext`会出现意外行为

时间:2018-04-27 04:07:56

标签: c# active-directory .net-core principalcontext

我需要验证用于连接到AD服务器的凭据。如果将无效凭据传递给PrincipalContext(ContextType, String, String, String),则PrincipalContext.ConnectedServer会引发System.DirectoryServices.DirectoryServicesCOMException,这是在PrincipalContext首次使用时发现的。

我正在尝试使用PrincipalContext.ValidateCredentials(null, null)测试凭据,但我遇到了问题。根据{{​​3}}

  

ValidateCredentials方法绑定到构造函数中指定的服务器。如果username和password参数为null,则验证构造函数中指定的凭据。

我创建了与服务器的连接。

string username = "username"
string password = "password"

PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "my_domain.local", username, password);

然后测试连接我尝试:

if (ctx.ValidateCredentials(null, null))
{
    // This block does not get hit!
    // This is surprising because the credentials are valid
}

具有不同的行为:

if (ctx.ValidateCredentials(username, password))
{
    // Credentials are valid, this block gets hit
}

文档让我相信这些调用应该具有相同的行为,但我遇到了不同的结果。为什么这是测试连接的正确方法?

1 个答案:

答案 0 :(得分:0)

我能够通过在我的计算机上的本地帐户下运行您的代码并在构造函数中传递有效的域凭据来复制它。 ValidateCredentials(null, null)确实失败了。

这听起来像是一个错误,无论是在代码中还是在文档中,所以我在GitHub上提交了一个错误:https://github.com/dotnet/corefx/issues/29369

编辑:看起来他们已决定按原样保留实施并更正文档。