Python 3.5、ldap3 和modify_password()

问题描述 投票:0回答:5

我一直在绞尽脑汁地尝试通过脚本发送更新我自己密码的请求。这是代码:

#!/usr/bin/python3.5

from ldap3 import Server, Connection, NTLM, ALL

server = Server('ldap://192.168.0.80', use_ssl=True)

conn = Connection(server, user="local\\dctest", password="Pa55word1", authentication=NTLM, auto_bind=True)

dn = "CN=dctest,CN=Users,DC=home,DC=local"

conn.extend.microsoft.modify_password(dn, new_password="Pa55word2", old_password="Pa55word1")

我得到的错误是:

{'dn': '', '类型': '修改响应', '描述': 'unwillingToPerform','推荐':无,'结果':53,'消息': '00002077:SvcErr:DSID-03190E44,问题 5003(WILL_NOT_PERFORM), 数据0 \x00'}

知道我做错了什么吗?

我拥有对 DC 的完全访问权限,并且我已确保密码正确等。我已阅读所有文档,但无法理解它。

任何帮助都会很棒!!

python ldap python-3.5 ldap3
5个回答
2
投票
从版本 0.9.4.2 开始,ldap3.modify_password() 不适用于 Active Directory,因为它使用 AD 不支持的密码修改扩展操作。 看来 MS 找到了一种与 AD 不同的方法。 ldap3 作者 (cannatag) 意识到了这一点,并在不久后添加了 ad_modify_password()。 您必须使用较新版本的 ldap3。

好的,感谢大家的帮助,以及 github 上的开发人员。

1
投票
我最终用来完成这项工作的代码是......

from ldap3 import Server, Connection server = Server('ldaps://<AD server address>', use_ssl=True) conn = Connection(server, user="<domain>\\<username>", password="<current password>", auto_bind=True) dn = 'CN=<username>,OU=Users,DC=<dominaname>' res = conn.extend.microsoft.modify_password(dn, old_password='<current password>', new_password='<new password>') print(res)

我想我会发布工作解决方案,因为互联网上似乎没有任何解决方案!上帝保佑我的同胞们发展人民。
    

尝试使用 ldaps:// 而不是 ldap://。或者根本不使用该方案并在服务器定义中传递 use_ssl=True 。 AD连接必须使用ssl修改密码。

0
投票

您使用的是哪个版本的 ldap3?从 ldap3 2.2 版的源代码来看,在我看来,该函数应该以类似的方式使用:

0
投票
#!/usr/bin/python3.5 from ldap3 import Server, Connection, NTLM, ALL server = Server('ldap://192.168.0.80', use_ssl=True) conn = Connection(server, user="local\\dctest", password="Pa55word1", authentication=NTLM, auto_bind=True) res = ldap3.extend.microsoft.modifyPassword(conn, user, "new_Pa55word2", "old_Pa55word1")

添加:

0
投票

conn.start_tls()

在向 AD 提出请求之前

© www.soinside.com 2019 - 2024. All rights reserved.