python - 使用 ldap3 库更改 OpenLDAP 中的用户密码

标签 python python-3.x openldap ldap3

我似乎无法使用针对 OpenLDAP 服务器的 ldap3 python 模块更改用户密码。有人问过类似的问题before但这是特定于 Active Directory 的。

我尝试过的:

from ldap3.extend.standard.modifyPassword import ModifyPassword
from ldap3.utils.hashed import hashed
password = hashed(HASHED_SALTED_SHA, password)
# or..
password = '{SASL}theuser@domain.com'
modify = ModifyPassword(
    connection, user.entry_get_dn(), new_password=password)
resp = modify.send()
print(modify.result)
{'referrals': None, 'result': 0, 'description': 'success', 'type': 'extendedResp', 'message': '', 'responseName': None, 'new_password': None, 'dn': '', 'responseValue': None}

描述说成功,但实际上并没有修改密码。

我还尝试发送修改替换消息:

def modify_user_password(self, user, password):
    dn = user.entry_get_dn()
    hashed_password = hashed(HASHED_SALTED_SHA, 'MyStupidPassword')
    changes = {
        'userPassword': [(MODIFY_REPLACE, [hashed_password])]
    }
    logger.debug('dn: ' + dn)
    logger.debug('changes: ' + str(changes))
    success = self.engage_conn.modify(dn, changes=changes)
    if success:
        logger.debug('Changed password for: %s', dn)
        print(self.engage_conn.result)
    else:
        logger.warn('Unable to change password for %s', dn)
        logger.debug(str(self.engage_conn.result))
        raise ValueError('stop')

该连接不是 SSL 连接。 AD 问题的答案要求连接通过 SSL。这也是 OpenLDAP 的要求吗?

编辑:

dn 更改为 user.entry_get_dn() 后,代码似乎在大约 90% 的时间内都有效。今天再次运行这些测试后,它似乎现在可以一致地工作了。我将这归因于没有在我的目录浏览器中查看新数据。

最佳答案

更改密码似乎按照文档中的描述进行,并在上面对我的问题的编辑中显示。为了将来引用,此代码似乎有效:

from ldap3 import (
    HASHED_SALTED_SHA, MODIFY_REPLACE
)
from ldap3.utils.hashed import hashed

def modify_user_password(self, user, password):
    dn = user.entry_get_dn()
    hashed_password = hashed(HASHED_SALTED_SHA, password)
    changes = {
        'userPassword': [(MODIFY_REPLACE, [hashed_password])]
    }
    success = self.connection.modify(dn, changes=changes)
    if not success:
        print('Unable to change password for %s' % dn)
        print(self.connection.result)
        raise ValueError('Unable to change password')

澄清一些事情:

  1. 这是连接到一个 OpenLDAP 服务器(有多个数据库)
  2. 这里没有 SSL。我们计划实现 SSL,但没有它也能正常工作。

关于python - 使用 ldap3 库更改 OpenLDAP 中的用户密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39325089/

相关文章:

python - python中将json数组直接反序列化为集合

linux - ldap修改: invalid format (line 4) entry: "olcDatabase={2},cn=config"

python - 为什么我在 seaborn 线图中得到线影?

python - 如何检查 python 3 中的不平衡括号?

python - Heroku - Python Shell 写入文件,但在 Django APP View 中不写入文件?

python - 如何在 python 3.6 中使用绝对和相对导入?

openldap - 登录 ldap 根 DN 的问题

ldap - Openldap:是否可以使用 "userPassword"而不是 "2.5.4.35"作为 pwdAttribute?

python - 如何在 Python 中将列表转换为嵌套字典

python - 用python检测英文文本