C# 如何使用.NET或LDAP验证过期的Active Directory密码 基本问题
如果Active Directory密码已过期,是否有方法使用.NET或其他类型的LDAP查询验证该密码?要明确的是,我不是说检查密码是否过期,我是说验证过期密码是否正确 我发现这解释了如何使用Win32 API的LogonUser()函数来实现。我已经问过了。在这里,我要问的是,除了Win32 API,最好是.NET,是否可以通过任何其他方式完成 进一步审议本专题 无论密码是否错误、过期或下次登录时需要更改,PrincipalContext.ValidateCredentials方法和DirectoryEntry构造函数都会返回相同的登录失败消息。无法区分错误的密码和正确但已过期的密码 Active Directory不公开密码散列,而且AFAIK没有办法解决这个问题(这可能是一件好事…),因此尝试使脚本散列密码并将其与目录进行比较是一条死胡同 我使用.NET(或Win32 API以外的任何东西)所能想到的最好的解决方案是这样一种笨拙的变通方法:C# 如何使用.NET或LDAP验证过期的Active Directory密码 基本问题,c#,.net,vb.net,authentication,active-directory,C#,.net,Vb.net,Authentication,Active Directory,如果Active Directory密码已过期,是否有方法使用.NET或其他类型的LDAP查询验证该密码?要明确的是,我不是说检查密码是否过期,我是说验证过期密码是否正确 我发现这解释了如何使用Win32 API的LogonUser()函数来实现。我已经问过了。在这里,我要问的是,除了Win32 API,最好是.NET,是否可以通过任何其他方式完成 进一步审议本专题 无论密码是否错误、过期或下次登录时需要更改,PrincipalContext.ValidateCredentials方法和Dire
- 如果在badLogonCount的“之前”和“之后”读数之间发生来自另一个源的身份验证尝试,或者管理员重置了badLogonCount或锁定持续时间到期,则会产生错误结果
- 脚本必须确保始终使用相同的域控制器,以避免由于收敛延迟而产生错误结果
- 在某些情况下,脚本必须进行更改(解锁帐户),否则它将无法工作。理想情况下,验证操作不应该改变它检查的数据的任何方面
[注:我添加了
c#
和vb.net
标记,因为尽管问题与语言无关,但我相信这些标记最有可能引起熟悉该主题的人的注意;其他标记本身的可见性似乎很低,在前5个小时只有7个视图卢比]p/Invoke示例出了什么问题?除此之外,我还不知道有什么管理方法可以做到这一点。好吧,你可以在我一小时前发布的一个喜欢的问题中看到,我在PowerShell中使用它时遇到了困难。我已经绕过了这个问题,但在某种程度上对我来说没有什么意义,这突出了它是一个多么混乱的问题解决方案是这样的。考虑到AD确实提供了识别身份验证失败具体原因的错误,只有Win32 API向用户报告,而其他身份验证方法只是报告成功或失败,这似乎很奇怪。我想这是一种“哦,来吧,一定有更好的方法…”