Criptografar senha para autenticação no AD (LDAP)

1 resposta
B

Boa tarde galera…

To que nem louco aqui desde ontem procurando isso e nada.

Tô desenvolvendo um programa aqui na minha empresa e preciso autenticar o usuário da aplicação junto ao AD.

Peguei um código na net e consegui autenticar de boa. Passo o login e senha do usuário e o AD me diz se estão corretos ou não (se a senha do usuário está correta).
Meu problema é o seguinte: a senha que o usuário informa é passada pro AD como texto. Usando um sniffer de rede aqui (wireshark) consegui ler o login e senha do usuário tranquilo.

Aqui vai o código do meu programa

public static void main(String[] args) {
		String username = "usuario";
		String password = "senha";
		String base = "ou=People,o=minhaEmpresa";
		String dn = "uid=" + username + ", " + base;
		String ldapURL = "ldap://endereçoDoServidorLDAP:489";
		
		
		Hashtable<String, String> environment = new Hashtable<String, String>();
		environment.put(Context.INITIAL_CONTEXT_FACTORY,	"com.sun.jndi.ldap.LdapCtxFactory");
		environment.put(Context.PROVIDER_URL, ldapURL);
		environment.put(Context.SECURITY_AUTHENTICATION, "simple");
		environment.put(Context.SECURITY_PRINCIPAL, dn);
		environment.put(Context.SECURITY_CREDENTIALS, password);
		
		try
		{
			DirContext authContext = new InitialDirContext(environment);

			System.out.println("Autenticado");
		}catch (AuthenticationException ex){

			System.out.println("Não autenticado");
			ex.printStackTrace();

		}catch (NamingException ex){
			ex.printStackTrace();
		}

	}

Imagino que o problema esta na linha
environment.put(Context.SECURITY_AUTHENTICATION, “simple”);
Dei uma procurada na net e mudei o segundo parâmetro para “DIGEST-MD5”, porém eu recebo o erro

Não autenticado

javax.naming.AuthenticationException: [LDAP: error code 49 - Internal authentication error]

at com.sun.jndi.ldap.LdapCtx.mapErrorCode(Unknown Source)

at com.sun.jndi.ldap.LdapCtx.processReturnCode(Unknown Source)

at com.sun.jndi.ldap.LdapCtx.processReturnCode(Unknown Source)

at com.sun.jndi.ldap.LdapCtx.connect(Unknown Source)

at com.sun.jndi.ldap.LdapCtx.(Unknown Source)

at com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(Unknown Source)

at com.sun.jndi.ldap.LdapCtxFactory.getUsingURLs(Unknown Source)

at com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(Unknown Source)

at com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(Unknown Source)

at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)

at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)

at javax.naming.InitialContext.init(Unknown Source)

at javax.naming.InitialContext.(Unknown Source)

at javax.naming.directory.InitialDirContext.(Unknown Source)

at Main.main(Main.java:51)

Onde a linha 51 é a linha que está
DirContext authContext = new InitialDirContext(environment);

Alguma idéia de como faço pra essa senha do usuário não passar em texto.

O que eu quero é só validar o usuário no AD.

Valeu

1 Resposta

O

Não é possível a conexão ao servidor LDAP ser através de SSL?

http://docs.oracle.com/javase/jndi/tutorial/ldap/security/ssl.html

Criado 2 de fevereiro de 2012
Ultima resposta 2 de fev. de 2012
Respostas 1
Participantes 2