Ldap

7 respostas
insonix

Boa tarde novamente.

Ja perguntei isto anteriormente sobre como auteticar no LDAP, mas ng contribuiu…
Pesquisei bastante na internet e ainda não consegui entender bem…
Se alguem já fez isto, por favor poderia me dar uma ajuda?

Tenho que autenticar no LDAP, e verificar se o usuário tem permissão (se login/senha estão OK).
Somente isto…
Gostaria de saber como faço isto, peguei vários exemplos mas não consegui entender bem…

Muitissimo obrigado!!!

7 Respostas

gallo

Boa tarde insonix.

Eu tenho algumas aplicações web que autenticam num diretório LDAP (no meu caso o OID).
Você está desenvolvendo para web ou desktop?
Você já tem algum serviço de diretório rodando (tipo OID ou MS Active Directory) ?

No meu caso de aplicações web a configuração é bem simples, basta algumas alterações no web.xml e a criação de um descritor para o OC4J.
Utilizo somente a parte de autenticação, a parte de autorização (perfil de acesso) eu não utilizo do JAAS

Por favor, especifique melhor o que você precisa para que eu possa ajudá-lo

Obrigado.

Adriano_Almeida

Que essa sigla queime no mármore do inferno!

Insonix, existem várias boas alternativas para trabalhar com LDAP em Java, uma delas é a API do Spring para LDAP que facilita bastante.
http://www.springframework.org/ldap

Caso não queira utilizar alguma outra biblioteca proprietária para fazer isso, você pode usar JNDI mesmo.
http://www.javaworld.com/javaworld/jw-03-2000/jw-0324-ldap.html

insonix

Na verdade eu nunca utilizei nada do LDAP.

As informações que tenho da empresa são exatamente as seguintes:

Autenticação de usuários é feita via servidor LDAP.
Configuração do servidor:

  • IP do Servidor LDAP: 10.20.5.47
  • Porta do servidor LDAP: 389
  • Usuário para conexão: consultaldap
  • Senha do usuário: xxx
  • Diretório base do active directory: “DC=empresa,DC=local”
  • O usuário e senha são para acesso á base para consulta.

Passos para autenticação

  • Autenticar no servidor LDAP com usuário e senha indicados acima
  • Fazer consulta para verificar existencia do usuário

É somente isto que tenho de informação, fiz uns testes aqui mas não to conseguindo evoluir.
Estou utilizando struts 1, e tomcat, sem nenhuma outra api ou biblioteca.

Agradeço sua ajuda.

Rafael_Nunes

Um código de autenticação via JNDI:
Ps: Estou considerando que sua Base LDAP é o Active Directory, caso for outra, vai precisar modificar as informações do SECURITY_PRINCIPAL

public static void main(String[] args) {
    
	Hashtable env = new Hashtable(11);
	env.put(Context.SECURITY_AUTHENTICATION,"simple");
	env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
	env.put(Context.PROVIDER_URL, "ldap://10.10.22.17:389");

	// Autentica o usuario com essas informações
	env.put(Context.SECURITY_PRINCIPAL, "cn=loginDoIndividuo,ou=Usuarios,dc=empresa,dc=com,dc=br");
	env.put(Context.SECURITY_CREDENTIALS, "123");

	try {
	    // Cria o Initial Context
		long init = System.currentTimeMillis();
	    DirContext ctx = new InitialDirContext(env); //Se passou deste ponto sem exeção, é porque autenticou

	    ctx.close();
	    long fim = System.currentTimeMillis();
	    System.out.println(">>>>>>>>Autenticou normalmente: " + ((fim - init) / 1000) + " segundos");
	}catch(Exception ex){
		System.out.println("Deu alguma zica : " + ex.getMessage());
		ex.printStackTrace()
	}
}
insonix

Obrigado a todos que responderam.
Com o link que passaram mais acima entendi melhor oque era LDAP, e fiz um código parecido com o que o Rafael passou.
Vendo o código do Rafael fiz uns ajustes e daqui a pouco vou testar.

Sensacional!

Obrigado a todos!

insonix

Bom, pessoal, agora tenho outro problema, queria saber se alguem pode me ajudar.

Como viram, já consegui fazer conectar no LDAP, agora o problema, é que tenho que varrer o diretorio para ver qual diretorio o usuario se encontra, para então eu fazer a autenticação.

Por ex:
Usuário “diego” está na pasta local/empresa/users
Usuário “joao” está na pasta local/empresa/peoes

Quando logo, não sei qual o caminho que o usuário que estou tentando logar vai estar…
Pelo que o pessoal de TI da empresa disse, tenho que varrer e ver qual diretorio o usuário está, e então tentar autenticar naquele diretorio.

Mas não tenho nem idéia de como fazer isto.

Alguem teria um exemplo?

Obrigado!

Rafael_Nunes

Você tem que fazer uma busca em toda hierarquia do seu dominio então.
Segue um exemplo de como fazer isso via JNDI:

//Pesquisar objetos usuarios.
	public static void main(String[] args){
		try{
			
			
			String path = "dc=empresa,dc=com,dc=br";

			NamingEnumeration results = null; 

			Hashtable env = new Hashtable(5, 0.75f);
				env.put(Context.SECURITY_AUTHENTICATION,"simple");
				env.put(Context.SECURITY_PRINCIPAL, "cn=administrator,cn=Users,dc=empresa,dc=com,dc=br");
				env.put(Context.SECURITY_CREDENTIALS, "senhaAdmin");
				env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
				env.put(Context.PROVIDER_URL, "ldap://192.168.0.100:389");
				
				DirContext ctx = new InitialDirContext(env);
				SearchControls search = new SearchControls();
				search.setSearchScope(SearchControls.SUBTREE_SCOPE);
				
				results = ctx.search(path, "(&(objectClass=user)(cn=username_do_peao))", search);
				while (results.hasMore()) {
                                    //Aqui voce pega as informacoes/atributos do maluko
                                SearchResult searchResult = (SearchResult) results.next();
				Attributes attributes = searchResult.getAttributes();
				attrCN = attributes.get("cn");


				}

				ctx.close();
			
			
		}catch(Exception e){
			System.out.println(e.getMessage());
                        e.printStackTrace();

		}
	}
Criado 15 de abril de 2008
Ultima resposta 16 de abr. de 2008
Respostas 7
Participantes 4