我使用
python的ldap模块验证用户登录.
当登录失败时,我会获得一个ldap.INVALID_CREDENTIALS登录名,但是这可能是由于密码错误或因为该帐户被锁定.第三次尝试后,该帐户被锁定.
当登录失败时,我会获得一个ldap.INVALID_CREDENTIALS登录名,但是这可能是由于密码错误或因为该帐户被锁定.第三次尝试后,该帐户被锁定.
我想检测到该帐户被锁定,并报告给沮丧的用户,而不是相同的“无效登录”消息.
> AD不使用userAccountControl LOCKED标志;
>应该使用lockoutTime属性
(&(objectClass=user)(lockoutTime>=1))@H_403_13@或针对特定用户:
(&(objectClass=user)(sAMAccountName=jabberwocky)(lockoutTime>=1))@H_403_13@但是这不行,每次查询都不会返回任何结果.
解决方法
lockoutTime中的值为零表示未锁定.所以,你应该尝试这个.
(&(objectClass=user)(!lockoutTime=0))@H_403_13@其实上面的查询还不是100%正确.如果您从MSDN读取精美打印,Microsoft建议您将Lockout-Time属性添加到Lockout-Duration属性,然后将其与当前时间进行比较.那是因为有一个叫锁闭持续时间的东西.一旦锁定持续时间过去,用户将自动解锁. “锁定时间为零”表示帐户永久锁定,直到管理员解锁为止.
看这个MSDN article
This attribute value is only reset when the account is logged onto
successfully. This means that this value may be non zero,yet the
account is not locked out. To accurately determine if the account is locked out,you must add the Lockout-Duration to this time and compare the result to the current time,accounting for local time zones and daylight savings time.