【问题标题】:DirectoryEntry increase bad password count by 2DirectoryEntry 将错误密码计数增加 2
【发布时间】:2020-02-04 21:36:39
【问题描述】:

我正在尝试使用以下代码验证 AD 用户:

using (var de = new DirectoryEntry($"LDAP://{domainTxt.Text}", usernameTxt.Text, passwordTxt.Text))
{
    var nO = de.NativeObject; //verify credentials
}

当调用 de.NativeObject 并且密码不正确时,错误密码尝试次数会增加 2 而不是 1。

使用此 powershell 脚本检查计数:

C:\Users\administrator> Get-ADUser -Filter {userprincipalname -eq "x@y.z"} -Properties badPwdCount

我发现这样做的原因是DirectoryEntry默认使用AuthenticationTypes.Secure,这很公平,这就是我实际需要的,如果我将其更改为其他任何内容,错误密码计数会增加一预计。

有谁知道我该如何解决这个问题?

【问题讨论】:

    标签: c# active-directory directoryentry


    【解决方案1】:

    我不知道为什么,但是AuthenticationTypes.Secure 的文档说:

    Active Directory 域服务使用 Kerberos,可能还有 NTLM,对客户端进行身份验证。

    可能意味着当一种方法由于某种原因失败时,它会再次尝试另一种方法。您可以通过使用 Wireshark 之类的工具监控网络流量来看到这一点。

    解决此问题的一种方法可能是使用LdapConnection 来验证凭据(如果您只需要连接到LDAP)。在另一个答案here 中有一个很好的例子。它还有一个额外的好处是可以告诉您验证失败的原因。

    【讨论】:

    • 感谢您的回答。不幸的是,我对这个解决方案的问题是,据我所知,LdapConnection 是不安全的,除非我使用 SSL,我也可以使用 DirectoryEntry(它不会将错误密码计数增加 2)。在所有情况下,对我来说使用 SSL 证书可能都不可行。
    • 您可以使用LdapConnection 指定AuthType,就像使用DirectoryEntry 一样,但您可以专门选择Kerberos NTLM (两者都不发送纯文本密码),如果您不希望它自动故障转移到另一个。
    • 不幸的是,如果我使用 AutType.Negotiate 我有同样的问题,所以似乎必须将其设置为 Kerberos。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 2014-04-06
    • 2021-04-27
    • 1970-01-01
    • 1970-01-01
    • 2012-01-07
    相关资源
    最近更新 更多