前提
安装依赖包
pip install ldap3
1 建立连接
from ldap3 import Connection, Server, SAFE_SYNC, MODIFY_REPLACE
LDAP_ADDRESS = '192.168.1.2'
LDAP_DOMAIN = 'lovelink.inc'
LDAP_WHO = 'Administrator'
LDAP_CRED = 'password_str'
conn = Connection(
server=Server(
LDAP_ADDRESS,
use_ssl=True,
connect_timeout=2,
port=636 # 注意端口号
),
user=f'{LDAP_WHO}@{LDAP_DOMAIN}',
password=LDAP_CRED,
client_strategy=SAFE_SYNC
)
print(conn.bind()) # 输出为`True` 测试连接成功
conn.unbind()
2 设置密码
new_pwd = '' # 新密码
conn.bind()
status, result, response, request = conn.modify(
# 此DN为例子,请以你的实际情况为准
dn='CN=zhangsan1,OU=二级组织单位,OU=测试组织单位,DC=lovelink,DC=inc',
changes={
# 由于`unicodePwd`字段不可读
# 故使用`userPassword`作为明文存储用户密码的字段
# 如果密码另存数据库等其他保存方式,`userPassword`可不写
'userPassword': [(MODIFY_REPLACE, [new_pwd])],
'unicodePwd': [(MODIFY_REPLACE, [f'"{new_pwd}"'.encode('utf-16-le')])],
# 66080 表示用户不可更改密码
'userAccountControl': [(MODIFY_REPLACE, [66080])]
}
)
print(status)
print(result)
print(response)
print(request)
conn.unbind()
3 说明 🔥
3.1 unicodePwd
utf-16-le
字符集编码- 字符外层需要使用
"
包裹,否则响应结果会unwillingtoperform
3.2 userAccountControl
- 对应数值 可参考官方文档:UserAccountControl 属性
3.3 unwillingtoperform 53 问题排查
密码复杂度
是否合规- unicodePwd是否使用
"
包裹
如有更多问题,欢迎在评论区留言
ENDING~