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! 
Procure saber sobre acessar servidores LDAP com java
Tem um exemplo no meu site, veja o link botão www abaixo
É possivel sim… Mas algumas configurações são necessárias no servidor que contem o AD.
[code]
public class ldapUtils {
}
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(">>>>>>>>Autenticou normalmente");
}catch(AuthenticationException ex){
System.out.println(">>>>>>>>Erro de autenticação");
ex.printStackTrace();
}catch (NamingException e) {
e.printStackTrace();
}
}
Olá,
Veja se isso te ajuda:
http://www.guj.com.br/posts/list/45731.java
Um abraço,
Adriano Anderson.
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 -> 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;
}
}