[LDAP] Modificar senha de usuário

2 respostas
B

Boa noite, galera.

Possuo uma aplicação que faz o login através de uma base LDAP. Além disso, a aplicação também permite a alteração das senhas dos usuários.
Bom, o método que criei consegue fazer a alteração das senhas, o problema é que elas ficam em plain text, e não criptografadas, como eu gostaria. Alguém sabe me dizer o que preciso modificar para conseguir isso?
Muito obrigado.

public class LDAP {

    public boolean updateSenha( username, newPassword ) {
        String    uid = "uid="+username;
        Hashtable env = new Hashtable();

        env.put( Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory" );
        env.put( Context.PROVIDER_URL,            "ldap://ldap.server.com.br:389" );
        env.put( Context.SECURITY_AUTHENTICATION, "simple" );
        env.put( Context.SECURITY_PRINCIPAL,      "cn=admin,dc=server,dc=com,dc=br" );
        env.put( Context.SECURITY_CREDENTIALS,    "teste123" );
       
        try {
            DirContext         dico = new InitialDirContext( env );
            ModificationItem[] moit = { new ModificationItem( DirContext.REPLACE_ATTRIBUTE
                                                            , new BasicAttribute( "userPassword", newPassword ) ) };

            dico.modifyAttributes( uid+",ou=Usuarios,dc=server,dc=com,dc=br", moit );
            dico.close();
            
            return true;
        } catch ( AuthenticationException ae ) {
            ae.printStackTrace();
        } catch ( NoPermissionException npe ) {
            npe.printStackTrace();
        } catch ( NamingException ne ) {
            ne.printStackTrace();
        } catch ( NullPointerException npe ) {
            npe.printStackTrace();
        } catch ( Exception e ) {
            e.printStackTrace();
        }
        
        return false;
    }

}

2 Respostas

C
bruno_cobra:
Boa noite, galera.

Possuo uma aplicação que faz o login através de uma base LDAP. Além disso, a aplicação também permite a alteração das senhas dos usuários.
Bom, o método que criei consegue fazer a alteração das senhas, o problema é que elas ficam em plain text, e não criptografadas, como eu gostaria. Alguém sabe me dizer o que preciso modificar para conseguir isso?
Muito obrigado.

public class LDAP {

    public boolean updateSenha( username, newPassword ) {
        String    uid = "uid="+username;
        Hashtable env = new Hashtable();

        env.put( Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory" );
        env.put( Context.PROVIDER_URL,            "ldap://ldap.server.com.br:389" );
        env.put( Context.SECURITY_AUTHENTICATION, "simple" );
        env.put( Context.SECURITY_PRINCIPAL,      "cn=admin,dc=server,dc=com,dc=br" );
        env.put( Context.SECURITY_CREDENTIALS,    "teste123" );
       
        try {
            DirContext         dico = new InitialDirContext( env );
            ModificationItem[] moit = { new ModificationItem( DirContext.REPLACE_ATTRIBUTE
                                                            , new BasicAttribute( "userPassword", newPassword ) ) };

            dico.modifyAttributes( uid+",ou=Usuarios,dc=server,dc=com,dc=br", moit );
            dico.close();
            
            return true;
        } catch ( AuthenticationException ae ) {
            ae.printStackTrace();
        } catch ( NoPermissionException npe ) {
            npe.printStackTrace();
        } catch ( NamingException ne ) {
            ne.printStackTrace();
        } catch ( NullPointerException npe ) {
            npe.printStackTrace();
        } catch ( Exception e ) {
            e.printStackTrace();
        }
        
        return false;
    }

}

Utilize o método abaxio para encriptar a senha

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import com.sun.org.apache.xml.internal.security.utils.Base64;

public String hashMD5Password(String password) {
		try {
			MessageDigest digest = MessageDigest.getInstance("MD5");
			digest.update(password.getBytes("UTF8"));
			String md5Password = Base64.encode(digest.digest());
			return "{MD5}" + md5Password;
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return "";
	}
S

Droga,agora que vi que esse post é de 2009,postei porém nem vi que o cara ressusitou LOL

Criado 27 de outubro de 2009
Ultima resposta 26 de fev. de 2014
Respostas 2
Participantes 3