加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-16 23:10:02 所属栏目:Python 来源:网络整理
导读:我使用 python的ldap模块验证用户登录. 当登录失败时,我会获得一个ldap.INVALID_CREDENTIALS登录名,但是这可能是由于密码错误或因为该帐户被锁定.第三次尝试后,该帐户被锁定. 我想检测到该帐户被锁定,并报告给沮丧的用户,而不是相同的“无效登录”消息. 搜索
我使用 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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读