繁体   English   中英

允许AD用户使用Python ldap3更改自己的密码

[英]Allow AD users to change their own passwords using Python ldap3

我正在使用Python ldap3 [1]构建一个API,该API允许用户使用其当前凭据更改其Microsoft Active Directory密码。 这是我的API正在执行的操作:

1-创建LDAP连接并绑定到LDAP服务器:

tls_config = Tls(validate=ssl.CERT_NONE) server = Server(ldaps_endpoint, port = 636, use_ssl = True, tls = tls_config) connection = Connection(server, user=username, password=password, authentication='NTLM') connection.bind()

2-使用extend.microsoft.modifyPassword.ad_modify_password() ldap3函数更改密码:

user_modified = extend.microsoft.modifyPassword.ad_modify_password(connection, user_dn, new_password, current_password)

当未设置下次登录时的用户标志更改密码时,此方法可以正常工作。 设置后,由于连接失败bind() ,因此它不起作用。 我尝试使用ANONYMOUS连接而不是NTLM成功绑定。 但是, ad_modify_password()函数失败并显示:

为了执行此操作,必须在连接上完成成功的绑定

ad_modify_password()如何与下一个登录标志上的更改密码一起使用

[1] https://ldap3.readthedocs.io/

不是-但这不是Python特有的。 Microsoft提供了一个可以在域控制器上运行的基于ASP的用户密码更改网站,并且MS的网站具有相同的限制。 如果用户的密码已经过期,或者用户需要在下次登录时更改其密码,那么您将陷入困境。

两种方法:

(1)构建自助密码重置功能,以针对用户的AD帐户密码以外的其他内容对用户进行身份验证-存储在其用户对象上的哈希属性,存储在数据库表中的质询/响应问题等。通过二级身份验证后,将使用管理员凭据重置密码。

(2)特别是对于必须在下次登录时更改密码的用户,当用户必须更改其密码时,pwdLastSet属性将设置为“ 0”。 使用具有“写入”值访问权限的系统凭证,将该值修改为-1。 然后绑定用户提供的帐户和密码。 如果绑定失败,则将pwdLastSet设置回0。如果绑定通过,则更改密码。

#1可以节省更多时间/精力,但是可以对密码过期的用户,下次登录时需要更改密码的用户,被锁定的用户以及忘记密码的用户进行排序。 “忘记密码/被锁定的人”往往是一个大赢家-减少服务台呼叫可以抵消投入自助密码重置开发的时间/金钱。

#2简单得多,但只处理您提出的单个方案。 如果为域定义了最长密码使用期限(或为某些用户帐户建立了最长密码使用期限的细粒度密码策略),则具有过期凭据的用户可能仍会卡住。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM