我正在使用python的ldap模块验证用户登录。 当登录失败时,我得到一个ldap.INVALID_CREDENTIALS登录,但这可能是因为密码错误或帐户被锁定。第三次尝试后帐户被锁定。
我想检测帐户是否被锁定,并将其报告给沮丧的用户,而不是相同的“无效登录”消息。
正在搜索我找到的解决方案:
我应该使用LDAP查询来查找锁定的用户:
(&(objectClass=user)(lockoutTime>=1))
或针对特定用户:
(&(objectClass=user)(sAMAccountName=jabberwocky)(lockoutTime>=1))
但这不起作用,查询每次都不返回结果。
此外,我发现锁定时间并不能保证所有AD用户(至少在我们的配置中是这样),而是在达到锁定失败次数时创建的。因此,在检查锁定账户时,也需要检查无账户或同等账户。
lockoutTime
是一个<not set>
属性,因此最简单的方法是使用:对于非空条目。
更新:
但是,当密码过期、需要更改密码等时,也会设置此值
因此需要通过以下方式进行筛选:
获取用户因违反密码策略而被锁定的情况,例如错误地输入密码5次。
lockoutTime
中的值为零表示它没有被锁定。所以,你应该试试这个。实际上,上面的查询仍然不是100%正确。如果您从MSDN阅读了精细打印,Microsoft建议您将
Lockout-Time
属性添加到Lockout-Duration
属性,然后将其与当前时间进行比较。那是因为有一种叫做锁定持续时间的东西。一旦锁定持续时间过去,用户将自动解锁。在Lockout-Duration
中为零意味着帐户将永远锁定,直到管理员将其解锁。看这个MSDN article
相关问题 更多 >
编程相关推荐