1

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

我正在尝试测试凭据,PrincipalContext.ValidateCredentials(null, null)但我遇到了问题。根据.NET Core 2.0 文档

ValidateCredentials 方法绑定到构造函数中指定的服务器。如果用户名和密码参数为空,则验证构造函数中指定的凭据。

我创建到服务器的连接。

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
}

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

4

1 回答 1

0

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

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

编辑:看起来他们已经决定将实现保持原样并更正文档。

于 2018-04-27T13:27:18.963 回答