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")publicstaticvoidmain(Stringargs[]){StringuserName="user";StringnewPassword="senha";@SuppressWarnings("rawtypes")HashtableauthEnv=newHashtable();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{DirContextauthContext=newInitialDirContext(authEnv);System.out.println("Autenticado!"+authContext);}catch(AuthenticationExceptionauthEx){System.out.println("Erro na autenticação! ");authEx.printStackTrace();}catch(NamingExceptionnamEx){System.out.println("Problemas na conexão! ");}}
mas se coloco um usuário ou senha q não faz sentido ele diz que esta autenticado
G
Gabs-JV
a
H
hmsilva
Segue um exemplo de conexão com LDAP.
Acho que pode te ajudar.
publicclassLdapContextCreation{publicstaticvoidmain(String[]args){LdapContextCreationldapContxCrtn=newLdapContextCreation();LdapContextctx=ldapContxCrtn.getLdapContext();}publicLdapContextgetLdapContext(){LdapContextctx=null;try{Hashtableenv=newHashtable();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=newInitialLdapContext(env,null);System.out.println("Connection Successful.");}catch(NamingExceptionnex){System.out.println("LDAP Connection: FAILED");nex.printStackTrace();}returnctx;}}
T
thiagoRibeiro
Fiz um teste com esse exemplo mas estou recebendo o erro
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 ?
T
thiagoRibeiro
alguém pode ajudar ?
G
gomesrod
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.
thiagoRibeiro:
Fiz um teste com esse exemplo mas estou recebendo o erro
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