检测在LDAP中是否使用LDAP锁定Active Directory用户帐户

前端之家收集整理的这篇文章主要介绍了检测在LDAP中是否使用LDAP锁定Active Directory用户帐户前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用 python的ldap模块验证用户登录.
登录失败时,我会获得一个ldap.INVALID_CREDENTIALS登录名,但是这可能是由于密码错误或因为该帐户被锁定.第三次尝试后,该帐户被锁定.

我想检测到该帐户被锁定,并报告给沮丧的用户,而不是相同的“无效登录”消息.

搜索我找到的解决方案:

> AD不使用userAccountControl LOCKED标志;
>应该使用lockoutTime属性

我应该使用的LDAP查询来查找被锁定的用户是:

(&(objectClass=user)(lockoutTime>=1))

或针对特定用户

(&(objectClass=user)(sAMAccountName=jabberwocky)(lockoutTime>=1))

但是这不行,每次查询都不会返回任何结果.

解决方法

lockoutTime中的值为零表示未锁定.所以,你应该尝试这个.
(&(objectClass=user)(!lockoutTime=0))

其实上面的查询还不是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.

猜你在找的Python相关文章