【问题标题】:Testing a `PrincipalContext` using `ValidateCredentials(null, null)` behaves unexpectedly使用 `ValidateCredentials(null, null)` 测试 `PrincipalContext` 的行为异常
【发布时间】:2018-04-27 04:07:56
【问题描述】:

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

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

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
}

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的回复加布里埃尔。你知道测试连接的正确方法还是我应该写一个后续问题?
    • 读取source code,看起来就像创建一个新的PrincipalContext对象测试连接。
    • 细节太大,无法评论,所以我发布了follow up question。这不是我想要的答案,但它帮助我接受了它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-20
    • 1970-01-01
    相关资源
    最近更新 更多