|
1
16
有点晚了,但我会把这个扔出去。 如果您真的想确定某个帐户未通过身份验证的具体原因(除了错误的密码、过期、锁定等原因外,还有很多其他原因),您可以使用Windows API登录用户。别被它吓倒了-这比看起来容易。您只需调用LogonUser,如果它失败,您可以查看marshal.getLastwin32Error(),它将为您提供一个返回代码,指示(非常)登录失败的特定原因。 但是,您将无法在正在进行身份验证的用户的上下文中调用它;您将需要一个私有帐户-我认为需要的是SE-TCB-U名称(也称为setcbprivilege)-一个有权“作为操作系统的一部分”的用户帐户。
如果失败,您将得到一个返回代码(您可以查找更多的返回代码,但这些代码非常重要:
剩下的只是复制/粘贴以获取要传入的dllimports和值
|
|
|
2
7
我知道这个答案晚了几年,但我们只是碰到了和原来海报一样的情况。不幸的是,在我们的环境中,我们不能使用LogonUser——我们需要一个纯LDAP解决方案。事实证明,有一种方法可以从绑定操作中获取扩展的错误代码。它有点难看,但它很管用:
您将需要错误代码的定义(在 http://www.lifeasbob.com/code/errorcodes.aspx ):
我在其他任何地方都找不到这个信息——每个人都说你应该使用logonuser。如果有更好的解决方案,我想听听。如果没有,我希望这能帮助那些不能叫LogonUser的人。 |
|
|
3
4
“密码过期”检查相对简单-至少在Windows上(不确定其他系统如何处理):当“pwdlastset”的int64值为0时,用户将不得不在下次登录时更改其密码。检查这一点的最简单方法是将此属性包含在您的DirectorySearch中:
至于“账户被锁定”的支票,一开始看起来很容易,但不是……“useraccountcontrol”上的“uf_lockout”标志不能可靠地完成其工作。
从Windows 2003 AD开始,您可以检查一个新的计算属性:
给一个导演
如果你能使用.NET 3.5,事情就变得容易多了-看看
MSDN article
关于如何使用
希望这有帮助! 马克 |
|
|
4
1
以下是在锁定密码(第一个值)和未锁定密码(第二个值)时为用户更改的AD LDAP属性。
|
|
|
Sandeep Kumar · 从返回的字段中提取特定字符串 2 年前 |
|
|
Charles Waters · 组合LDAP查询不会给出正确的结果 2 年前 |
|
|
geekygeek · AWS托管目录服务,无法配置DHCP服务 2 年前 |
|
|
Xyro · Azure AD本地计算机限制 3 年前 |