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