这个作品 - 请参阅下面的解决方案 - 如果您觉得这有帮助,请告诉我,因为我们的商店对这是否是一个好的解决方案存在分歧。
以下是Active Directory允许旧密码更改后工作的解决方案。我非常希望收到有关接受此解决方案的反馈,因为它在登录身份验证期间使用 ChangePassword。这是一件奇怪的事情,但它确实有效。目前我们的商店没有使用这个解决方案,所以如果有人能告诉我他们是否正在使用它,那将不胜感激。
谢谢Ch
Active Directory 和旧密码返回有效(15 分钟到 +- 小时)。这在调用 SetPassword 或 ChangePassword 时发生。
历史:
我发现这被称为 AD 的“功能”,并且在设计上内置于 AD 中,因此当用户更改密码时,存在一种宽限期,允许使用这些密码的所有资源转移到新的资源。
支持 AD 知道最新密码这一概念的 AD 的一个示例是更改 PC 上的登录密码——在这种情况下,计算机将不允许旧密码登录。虽然我没有这个问题的答案(除了微软必须让它工作),但我认为这并不像 PC 所涉及的那样简单,而且它也有密码。
显示 AD 中的密码更改如何持续一段时间的一个示例可能是:
使用从 Windows 7 PC 到 Windows Server 2008 R2 机器的远程桌面。从 Windows 安全框登录,然后出现,单击确定框,单击确定,您已登录。现在将您用于远程的用户的密码更改为框(不同于您的柯克曼用户??),注销并登录再次使用旧密码(在 15 分钟到一个小时 +- 的时间范围内)。旧密码将使您通过 Windows 安全框并进入 OK 框。当您单击确定时,它将失败。如果您从远程桌面重新开始并尝试输入错误密码,您将被阻止在 Windows 安全框并显示“登录尝试失败”消息。时间限制到期后,您将无法使用旧密码通过 Windows 安全框。(确保每次都从远程桌面开始,不要切换用户,这将按预期运行,这也表明 PC 以某种方式参与)。至少它没有用户登录 - 但这确实表明(似乎是 AD)在某个级别允许旧密码在某个级别进行身份验证。
研究:我发现了很多对这个问题的引用,只有一个潜在的解决方案,到目前为止我还无法确定我们是否可以实现它(这是对严格通过 Kerberos 调用而不是 NTLM 的引用,这并不像它可能会根据文档和我的研究出现)。我发现了很多关于如何在 .NET 中与 AD 交互的链接,但没有实际的 AD 手册。
SOLUTION SOLUTION SOLUTION - 如果您需要 SOLUTION SOLUTION,请阅读此部分!!!目前:我发现(在测试期间偶然发现)对 AD 的 ChangePassword 调用不允许传递给它的 OldPassword 成功地将密码更改为新密码。我认为这个有效的测试实际上并不为人所知,因为我没有找到任何关于它正在使用的参考。我实际上还没有找到任何解决这个问题的方法。一天凌晨 3:00,我意识到我可以利用 ChangePassword 的这种用法来解决这个问题——至少是一种我们可以立即使用的变通方法,直到我们可以确定更好的方法。
首先,我检查一切是否有效,然后 AD 返回密码有效。然后使用旧密码和新密码作为用户提供的密码(两者相同)调用 ChangePassword(用户名、旧密码、新密码)。我知道会发生两种结果之一(可能是三种,但违反密码策略会阻止它成功)。OldPassword 是好的并且我们失败是因为没有满足密码策略(历史,新密码不能是最后 N 个密码之一),或者我们失败是因为 Old Password 不正确(两者都作为异常错误返回,消息中带有文本)。我们检查最后一个条件,如果旧密码无效,我们不会让用户登录。
未来:也许第二双眼睛会有所帮助。
我认为解决方案是模拟或 Kerberos。我没有成功地找到足够的解决方案。很明显,AD 可以区分旧密码,因为 ChangePassword 可以做到这一点。我们正在做的是安全的核心,所以并不是所有的东西都是开放的(比如在 AD 中查看密码历史的能力,我还没有找到访问它的方法)。