我需要验证用于连接到 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
}
文档让我相信这些调用的行为应该相同,但我遇到了不同的结果。为什么会这样?测试连接的正确方法是什么?