es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Error C# OpenLDAP: unicodePwd: tipo de atributo indefinido.

Estoy tratando de cambiar la contraseña de usuario de OpenLDAP desde ASP.NET Core Web API utilizando la biblioteca “Novell.Directory.Ldap”. OpenLDAP está configurado en Ubuntu 18.04 con SSL habilitado. Por lo tanto, me conecto utilizando la opción “SecureSocketLayer = true” y “Port = 636”. A continuación se muestra el código para cambiar la contraseña:

string oldPassword = "'" + OldPassword + "'";
string newPassword = "'" + NewPassword + "'";
var oldPasswordbytes = Encoding.Unicode.GetBytes(oldPassword);
var newPasswordbytes = Encoding.Unicode.GetBytes(newPassword);

LdapModification[] modifications = new LdapModification[2];
LdapAttribute deletePassword = new LdapAttribute("unicodePwd", oldPasswordbytes);
modifications[0] = new LdapModification(LdapModification.Delete, deletePassword);
LdapAttribute addPassword = new LdapAttribute("unicodePwd", newPasswordbytes );
modifications[1] = new LdapModification(LdapModification.Add, addPassword);
connection.Modify(userDn, modifications);

Este código funciona bien con el dominio de Active Directory (AD). Pero para OpenLDAP, da un error:

unicodePwd: el tipo de atributo no está definido

He intentado usar userPassword en lugar de unicodePwd, pero obtengo el mismo tipo de error. ¿Este error se debe a que el atributo no existe en OpenLDAP o no puedo usar este código para OpenLDAP? ¿Cómo se puede cambiar la contraseña de usuario de OpenLDAP utilizando la biblioteca C#?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El atributo unicodePwd es específico de Active Directory y no de OpenLDAP. En OpenLDAP, el atributo para almacenar las contraseñas de usuario es userPassword. Para cambiar la contraseña de usuario en OpenLDAP usando la biblioteca Novell.Directory.Ldap, se puede utilizar el siguiente código:

    string oldPassword = OldPassword;
    string newPassword = NewPassword;
    
    LdapModification[] modifications = new LdapModification[2];
    LdapAttribute deletePassword = new LdapAttribute("userPassword", oldPassword);
    modifications[0] = new LdapModification(LdapModification.Delete, deletePassword);
    LdapAttribute addPassword = new LdapAttribute("userPassword", newPassword);
    modifications[1] = new LdapModification(LdapModification.Add, addPassword);
    connection.Modify(userDn, modifications);
    

    Ten en cuenta que el atributo userPassword en OpenLDAP espera que la contraseña se almacene como un valor hash. Por lo tanto, el valor de newPassword debe ser un valor hash de la contraseña en texto plano del usuario. La forma recomendada de generar los hashes de las contraseñas es utilizando el algoritmo de hash SSHA.

    Además, asegúrate de que la conexión a OpenLDAP se establezca con el puerto correcto y los ajustes de SSL adecuados.

Comments are closed.