É possivel verificar se um usuario e senha existem no Active Diretory?

5 respostas
W

Bom pessoal minha duvida é a seguinte, gostaria de escrever uma aplicação onde o usuário vai informar seu login e senha da rede, e atraves do java verificar se esse login e senhas são validos em um determinado active diretory (dominio). Se possivel ainda gostaria de buscar algumas informações como o nome completo do usuario. Alguem tem alguma sugestão ou ja fez algo parecido???

Obrigado! :smiley:

5 Respostas

F

Procure saber sobre acessar servidores LDAP com java
Tem um exemplo no meu site, veja o link botão www abaixo

O

É possivel sim... Mas algumas configurações são necessárias no servidor que contem o AD.
[code]
public class ldapUtils {

}

R

Tenta criar um Context com o usuário, caso ele não exista irá te lançar uma AuthenticationException:

Hashtable env = new Hashtable(11);
	env.put(Context.SECURITY_AUTHENTICATION,"simple"); //tipo de autenticação
	env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); //context factory default
	env.put(Context.PROVIDER_URL, "ldap://192.168.0.2:389"); //ip e porta do AD
	env.put(Context.SECURITY_PRINCIPAL, "cn=my.user,ou=Usuarios,dc=domain,dc=mus,dc=br"); //DN do usuário completa
	env.put(Context.SECURITY_CREDENTIALS, "123"); //senha do usuário
	try {
	    // Create initial context
	    DirContext ctx = new InitialDirContext(env);

	    ctx.close();
	    System.out.println("&gt&gt&gt&gt&gt&gt&gt&gtAutenticou normalmente");
	}catch(AuthenticationException ex){
		System.out.println("&gt&gt&gt&gt&gt&gt&gt&gtErro de autenticação");
		ex.printStackTrace();
    }catch (NamingException e) {
	    e.printStackTrace();
	}
    }
A

Olá,

Veja se isso te ajuda:
http://www.guj.com.br/posts/list/45731.java

Um abraço,
Adriano Anderson.

O

Desculpa, perdi a conexão enquanto postava :lol:
segue o codigo;

import java.util.Hashtable;
import java.util.ArrayList;
import javax.naming.*;
import javax.naming.ldap.*;
import javax.naming.directory.*;
import java.io.IOException;
import org.apache.naming.java.javaURLContextFactory;

public class LdapUtils {
    
    /*
     * Definicao das variaveis estaticas.
     * Administrador, senha de administrador.
     * LDAP segura ( SSL )
     * LDAP normal.
     * Keystore, variavel necessario para conectar no modo seguro do LDAP.
     * Para uso da mesma, é necessario que o servidor tenha instalado um certificado de autenticidade. CA.
     * O certificado deve ser importado para a maquina onde a classe ira ser executada.(SERVER)
     * Usar o comando -&gt keytool -import -alias nomeDoAlias - file pathDoCertificado destino(JAVA_HOME\jre\lib\security\cacerts).
     */
    
    private static String administrador = "CN=administrador,CN=Users,DC=analia,DC=br"; // meu dominio é analia.br
    private static String adminPassword = ******; // seu passwd
    // Para poder autenticar um usuario é necessário logar com uma conta de administrador do dominio.
    private static String ldapUrlSSl = "ldaps://condor.analia.br:636";
    private static String ldapUrl = "ldap://analia.br:389";
    private static String keystore = "c:\\Arquivos de programas\\Java\\jdk1.5.0_06\\jre\\lib\\security\\cacerts";
    
    // Constantes da biblioteca do LDAP ( lmaccess.h ).
    private static int UF_ACCOUNTDISABLE = 0x0002;
    private static int UF_PASSWD_NOTREQD = 0x0020;
    private static int UF_PASSWD_CANT_CHANGE = 0x0040;
    private static int UF_NORMAL_ACCOUNT = 0x0200;
    private static int UF_DONT_EXPIRE_PASSWD = 0x10000;
    private static int UF_PASSWORD_EXPIRED = 65536;
    
    public LdapUtils() {
    }
    
    /** Verifica se o usuario existe no Active Directory.
     *
     *  @param String usuario - Indica o usuario a ser buscado no AD.
     *  @param String senha - Indica a senha do usuario.
     *  @return String flag - Retorna uma string contendo o status da busca. Autenticado, Usuario Invalido ou Senha Invalida.
     *
     */
    
    public static synchronized String autenticacaoAD(String usuario, String senha){
        
        String flag = null;
        Hashtable active = new Hashtable();
        Context contexto = null;
        String userName = usuario + "@analia.br";
        String Password = senha;
        
        try {
            
            active.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
            active.put(Context.PROVIDER_URL,ldapUrl);
            active.put(Context.SECURITY_AUTHENTICATION,"simple");
            active.put(Context.SECURITY_PRINCIPAL, userName);
            active.put(Context.SECURITY_CREDENTIALS,Password);
            contexto = new InitialDirContext(active);
            flag = "Autenticado";
            
        }
        
        catch (AuthenticationException ex) {
            
            String[] erro = ex.toString().split(":");
            String[] e = erro[erro.length-1].split(",");
            
            if(e[1].compareTo(" data 525") == 0)
                flag = "Usuario invalido";
            
            else if(e[1].compareTo(" data 52e") == 0)
                flag = "Sennha invalida";
            
        } catch (NamingException ex) {
            System.out.println("NamingException is: " + ex);
        }
        
        return flag;
    }
}
Criado 6 de dezembro de 2006
Ultima resposta 7 de dez. de 2006
Respostas 5
Participantes 5