【问题标题】:ChangePassword on a user object does not lock account if not successful如果不成功,用户对象上的 ChangePassword 不会锁定帐户
【发布时间】:2023-04-12 02:14:01
【问题描述】:

我有一个使用 Windows 身份验证和模拟的 ASP.Net 应用程序(在 Win2K 上)。我们正在使用以下代码更改密码:

Dim objDE As DirectoryEntry
'... 
objDE.Invoke("ChangePassword", txtOldPassword, txtNewPassword)

此代码效果很好,但如果多次尝试不成功,它不会锁定帐户。如果多次提供不正确的密码(如政策中所述),是否有任何方法可以使此代码锁定帐户。我无法提升用户权限,因为这可能会降低系统的安全性。

【问题讨论】:

    标签: asp.net active-directory adsi


    【解决方案1】:

    我不确定普通用户是否有权直接锁定自己的帐户。但是,这样做的一种方法是:

    objDE.InvokeSet("IsAccountLocked", true)
    

    有关 Active Directory 上 .NET 的重要资源,请参阅this article

    我对上面的链接使用 C# 表示赞同,如果您需要一个好的转换器,请尝试this one

    【讨论】:

    • 很遗憾,我们无法使用此解决方案,因为它需要提升用户权限,这对我们来说是不可接受的。
    • 您不能创建一个服务帐户来执行身份验证吗?该帐户不需要能够交互式登录。使用用户凭据登录的另一个问题是,即使他们的帐户被禁用,仍然有可能!作为一个黑客,虽然我不想提及它,但您总是可以通过尝试使用错误的密码多次登录来锁定他们的帐户。
    • 您建议的 hack 实际上是个好主意。我也是这么想的。
    最近更新 更多