Como você já sabe, atualizar o atributo unicodePwd
de uma conta de usuário remotamente requer uma conexão SSL / TLS de 128 bits ou melhor com o controlador de domínio, por padrão. Ou SASL se 2008R2 ou 2012. Parece que você já está coberto desde que você tenha um certificado e esteja utilizando LDAPS.
Além disso, apenas para informações públicas, o atributo unicodePwd
é write -only. Nunca é retornado no resultado de uma pesquisa LDAP.
Também vejo que você está colocando a senha de texto sem formatação entre aspas e, em seguida, a codificação base64, que estão corretas. Você está tão perto!
Mas o que eu não vejo no seu código é onde você está garantindo que a codificação é UTF-16. tem para ser UTF-16. UTF-16 little endian, então codificado em base64, para ser exato.
"... the DC requires that the password value be specified in a UTF-16 encoded Unicode string containing the password surrounded by quotation marks, which has been BER-encoded as an octet string per the Object(Replica-Link) syntax."
Além disso, só para não perdermos o óbvio, garanta as permissões corretas:
For the password change operation to succeed, the server enforces the requirement that the user or inetOrgPerson object whose password is being changed must possess the "User-Change-Password" control access right on itself,
(ou seja, a conta não tem o sinalizador "o usuário não pode alterar a senha",)
and that Vdel must be the current password on the object. For the password reset to succeed, the server enforces the requirement that the client possess the "User-Force-Change-Password" control access right on the user or inetOrgPerson object whose password is to be reset.
E, novamente, para não ignorarmos o óbvio, verifique se o novo valor que você está tentando definir atende à política de senha do domínio.
Eu não falo PHP ou Perl tão bem, mas aqui está um Powershell que obtém a senha no formato codificado corretamente que você precisa:
PS C:\> [System.Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes("'"SweetNewPwd123!'""))
IgBTAHcAZQBlAHQATgBlAHcAUAB3AGQAMQAyADMAIQAiAA==
Vamos refletir sobre a documentação do sempre misterioso atributo unicodePwd
:
Além disso, como leitura suplementar, confira este post: