Validar Usuário no AD

Amigos,

estou querendo validar o login e senha do usuário no AD mas não estou conseguindo o que a de errado com meu codigo abaixo

	@SuppressWarnings("unchecked")
	public static void main(String args []){  
		  
		String userName = "user";
		String newPassword = "senha";		
		@SuppressWarnings("rawtypes")
		Hashtable authEnv = new Hashtable();
        authEnv.put(Context.PROVIDER_URL,"LDAP://11.11.111.111/DC=empresa");
        authEnv.put(Context.SECURITY_PRINCIPAL, userName);  
        authEnv.put(Context.SECURITY_CREDENTIALS, newPassword);
        authEnv.put(Context.SECURITY_AUTHENTICATION, "simple");
  
       try  
        {  
           DirContext authContext = new InitialDirContext(authEnv);  
           System.out.println("Autenticado!" + authContext);  
  
        }  
        catch (AuthenticationException authEx)  
        {  
        System.out.println("Erro na autenticação! ");  
        authEx.printStackTrace();  
        }  
        catch (NamingException namEx)  
        {  
        System.out.println("Problemas na conexão! ");  
        }  
    }

Qual o erro gerado ???

Na Verdade não da erro,

mas se coloco um usuário ou senha q não faz sentido ele diz que esta autenticado

a

Segue um exemplo de conexão com LDAP.
Acho que pode te ajudar.

[code]public class LdapContextCreation {
public static void main(String[] args) {
LdapContextCreation ldapContxCrtn = new LdapContextCreation();
LdapContext ctx = ldapContxCrtn.getLdapContext();
}
public LdapContext getLdapContext(){
LdapContext ctx = null;
try{
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,“com.sun.jndi.ldap.LdapCtxFactory”);
env.put(Context.SECURITY_AUTHENTICATION, “Simple”);

        //it can be <domain\\userid> something that you use for windows login  
        //it can also be  
        env.put(Context.SECURITY_PRINCIPAL, "Enter user name here");  
        env.put(Context.SECURITY_CREDENTIALS, "Password goes here");  
        
        //in following property we specify ldap protocol and connection url.              
        //generally the port is 389  
        env.put(Context.PROVIDER_URL, "ldap://xxxxxxxx:389");  
        ctx = new InitialLdapContext(env, null);  
        System.out.println("Connection Successful.");  
    }catch(NamingException nex){  
        System.out.println("LDAP Connection: FAILED");  
        nex.printStackTrace();  
    }  
    return ctx;  
}  

} [/code]

Fiz um teste com esse exemplo mas estou recebendo o erro

LDAP Connection: FAILED
javax.naming.AuthenticationException: [LDAP: error code 49 - 80090308: LdapErr: DSID-0C0903A9, comment: AcceptSecurityContext error, data 52e, v1db0

quando eu comento a linha

env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory")

qualquer valor q eu coloco no usuário ou senha não da erro, o que pode ser ?

Thiago,

Não sei se pode ser mas vc pode tentar colocar isso

env.put(Context.SECURITY_PRINCIPAL,"uid=userName,ou=Information Technology Team,ou=New Jersey,dc=ost,dc=srcorp,dc=com");

ao invés disso

env.put(Context.SECURITY_PRINCIPAL, "Enter user name here");

Será que alguém pode me ajudar como preencher com os valores essa String ?

env.put(Context.SECURITY_PRINCIPAL,"uid=userName,ou=Information Technology Team,ou=New Jersey,dc=ost,dc=srcorp,dc=com");

uid=userName e igual a uid=o usuário da rede e isso mesmo ?

ou=Information Technology Team Essa informação seria “LPAD” ?

ou=New Jersey Que informação vai aqui ?

dc=ost,dc=srcorp,dc=com Essa informação seria o data center do AD ?

alguém pode ajudar ?

Sem esse ContextFactory ele não sabe que tipo de serviço vai ser usado como contexto (LDAP? JNDI em um AppServer?), ele vai usar um contexto padrão que depende do ambiente. Como esse contexto padrão provavelmente nao usa autenticação, acaba aceitando qualquer coisa, mas não aconteceu nenhuma conexão com AD.

Conclusão: precisa colocar o Context.INITIAL_CONTEXT_FACTORY.

[quote=thiagoRibeiro]Fiz um teste com esse exemplo mas estou recebendo o erro

LDAP Connection: FAILED
javax.naming.AuthenticationException: [LDAP: error code 49 - 80090308: LdapErr: DSID-0C0903A9, comment: AcceptSecurityContext error, data 52e, v1db0

[/quote]
Agora sim você tomou um erro retornado pelo AD.
Para interpretar esses erros você precisa pegar esse codigozinho depois do “data”, no caso é 52e. Usando uma tabelinha como essa (http://www-01.ibm.com/support/docview.wss?uid=swg21290631) vc obtém o significado e dá o tratamento apropriado para sua aplicação:
52e invalid credentials

Em um LDAP normal precisaria colocar essa stringona, mas no AD isso não é necessário. Basta colocar

usuario@dominio

Era isso mesmo meu amigo muito obrigado