É possivel verificar se um usuario e senha existem no Active Diretory?
5 respostas
W
waltercoan
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???
Procure saber sobre acessar servidores LDAP com java
Tem um exemplo no meu site, veja o link botão www abaixo
O
offString
É possivel sim... Mas algumas configurações são necessárias no servidor que contem o AD.
[code]
public class ldapUtils {
}
R
Rafael_Nunes
Tenta criar um Context com o usuário, caso ele não exista irá te lançar uma AuthenticationException:
Hashtableenv=newHashtable(11);env.put(Context.SECURITY_AUTHENTICATION,"simple");//tipo de autenticaçãoenv.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");//context factory defaultenv.put(Context.PROVIDER_URL,"ldap://192.168.0.2:389");//ip e porta do ADenv.put(Context.SECURITY_PRINCIPAL,"cn=my.user,ou=Usuarios,dc=domain,dc=mus,dc=br");//DN do usuário completaenv.put(Context.SECURITY_CREDENTIALS,"123");//senha do usuáriotry{// Create initial contextDirContextctx=newInitialDirContext(env);ctx.close();System.out.println(">>>>>>>>Autenticou normalmente");}catch(AuthenticationExceptionex){System.out.println(">>>>>>>>Erro de autenticação");ex.printStackTrace();}catch(NamingExceptione){e.printStackTrace();}}
Desculpa, perdi a conexão enquanto postava :lol:
segue o codigo;
importjava.util.Hashtable;importjava.util.ArrayList;importjavax.naming.*;importjavax.naming.ldap.*;importjavax.naming.directory.*;importjava.io.IOException;importorg.apache.naming.java.javaURLContextFactory;publicclassLdapUtils{/* * 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 -> keytool -import -alias nomeDoAlias - file pathDoCertificado destino(JAVA_HOME\jre\lib\security\cacerts). */privatestaticStringadministrador="CN=administrador,CN=Users,DC=analia,DC=br";// meu dominio é analia.brprivatestaticStringadminPassword=******;// seu passwd// Para poder autenticar um usuario é necessário logar com uma conta de administrador do dominio.privatestaticStringldapUrlSSl="ldaps://condor.analia.br:636";privatestaticStringldapUrl="ldap://analia.br:389";privatestaticStringkeystore="c:\\Arquivos de programas\\Java\\jdk1.5.0_06\\jre\\lib\\security\\cacerts";// Constantes da biblioteca do LDAP ( lmaccess.h ).privatestaticintUF_ACCOUNTDISABLE=0x0002;privatestaticintUF_PASSWD_NOTREQD=0x0020;privatestaticintUF_PASSWD_CANT_CHANGE=0x0040;privatestaticintUF_NORMAL_ACCOUNT=0x0200;privatestaticintUF_DONT_EXPIRE_PASSWD=0x10000;privatestaticintUF_PASSWORD_EXPIRED=65536;publicLdapUtils(){}/** 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. * */publicstaticsynchronizedStringautenticacaoAD(Stringusuario,Stringsenha){Stringflag=null;Hashtableactive=newHashtable();Contextcontexto=null;StringuserName=usuario+"@analia.br";StringPassword=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=newInitialDirContext(active);flag="Autenticado";}catch(AuthenticationExceptionex){String[]erro=ex.toString().split(":");String[]e=erro[erro.length-1].split(",");if(e[1].compareTo(" data 525")==0)flag="Usuario invalido";elseif(e[1].compareTo(" data 52e")==0)flag="Sennha invalida";}catch(NamingExceptionex){System.out.println("NamingException is: "+ex);}returnflag;}}