python-3.x active-directory ldap

python-3.x - ldap django



No se puede cambiar la contraseña del usuario a través de ldap3 Python3 (2)

Este código funciona con Windows 2012 R2 AD:

pip instala ldap

#!/usr/bin/python import ldap3 SERVER=''127.0.0.1'' BASEDN="DC=domain,DC=com" USER="[email protected]" CURREENTPWD="current_password" NEWPWD="new_password" SEARCHFILTER=''(&(|(userPrincipalName=''+USER+'')(samaccountname=''+USER+'')(mail=''+USER+''))(objectClass=person))'' USER_DN="" ldap_server = ldap3.Server(SERVER, get_info=ldap3.ALL) conn = ldap3.Connection(ldap_server, USER, CURREENTPWD, auto_bind=True) conn.start_tls() print conn conn.search(search_base = BASEDN, search_filter = SEARCHFILTER, search_scope = ldap3.SUBTREE, attributes = [''cn'', ''givenName''], paged_size = 5) for entry in conn.response: if entry.get("dn") and entry.get("attributes"): if entry.get("attributes").get("cn"): USER_DN=entry.get("dn") print USER_DN print ldap3.extend.microsoft.modifyPassword.ad_modify_password(conn, USER_DN, NEWPWD, CURREENTPWD, controls=None)

Cada vez que trato de cambiar la contraseña de alguien a través de la biblioteca ldap3, aparece el siguiente error:

{''type'': ''modifyResponse'', ''result'': 53, ''message'': ''0000001F: SvcErr: DSID-031A12D2, problem 5003 (WILL_NOT_PERFORM), data 0/n/x00'', ''referrals'': None, ''description'': ''unwillingToPerform'', ''dn'': ''''}

Este error generalmente ocurre debido a las dos condiciones: cualquiera de los usuarios está tratando de modificar la contraseña a través de la conexión no encriptada o la contraseña se envía con la codificación incorrecta. Mi conexión SSL está bien (al menos parece):

print(connection) >>> ldaps://DC1.DOMAIN.LOCAL:636 - ssl - user: DOMAIN/admin - not lazy - bound - open - <local: 172.16.10.2:49230 - remote: 172.16.10.254:636> - tls not started - listening - SyncStrategy - internal decoder

Traté de codificar la cadena que intento enviar al servidor LDAP, pero .encode (''utf-16le'') no funcionó. ¿Alguna otra solución?

Tengo un entorno de dominio de prueba con Windows Server 2012 R2 como controlador de dominio, y el código con el que intento cambiar la contraseña está presente a continuación.

import ssl from ldap3 import * tls_configuration = Tls(validate=ssl.CERT_REQUIRED, version=ssl.PROTOCOL_TLSv1_2) s = Server(''DC1.domain.local'', get_info=ALL, use_ssl=True, tls=tls_configuration) password = ''mypasswordhere'' c = Connection(s, user="DOMAIN//admin", password=password) c.open() c.bind() user = "CN=Dummy Dumass,OU=Automatically Generated,OU=Staff,OU=RU,DC=DOMAIN,DC=LOCAL" c.modify(user, { ''unicodePwd'': [(MODIFY_REPLACE, [''New12345''])] }) print(c.result) c.unbind()


ldap3 contiene un método específico para cambiar la contraseña de AD, use el siguiente código en lugar de c.modify() :

c.extend.microsoft.modify_password(user, new_password)