Problemas de autenticação utilizando Seam 2.1 e LDAP [Resolvido]

Viva,

Estou a tentar configurar a autenticação de uma aplicação utilizando o JBoss + Seam 2.1 e o LDAP, para isso segui o post indicado:
http://blog.furiousbob.com/2008/08/28/identity-management-de-verdade-com-novo-seam-21-beta/

No entanto como o meu LDAP já existia e é bastante extenso (nº utilizadores) não pude implementar o atributo “member” tal como é descrito no post.

O meu components.xml

 <security:ldap-identity-store 	name="ldapIdentityStore"
    							  	server-address="sedna.cmarl.pt"
    								server-port="389"
    								user-DN-prefix="uid="
    								user-DN-suffix=",ou=Users,dc=cmarl,dc=pt"
    								user-context-DN="ou=Users,dc=cmarl,dc=pt"
    								user-password-attribute="userPassword"    								
    								bind-DN="cn=Manager,dc=cmarl,dc=pt"
    								bind-credentials="secret"    								
    								user-object-classes="person,uidObject"/>
    								
  
   <security:identity-manager identity-store="#{ldapIdentityStore}"/> 

quando ponho para correr a autenticação falha e devolve o seguinte erro:


12:55:08,755 ERROR [SeamLoginModule] Error invoking login method
org.jboss.seam.security.management.IdentityManagementException: Authentication error
	at org.jboss.seam.security.management.LdapIdentityStore.authenticate(LdapIdentityStore.java:441)
	...
	at java.lang.Thread.run(Unknown Source)
Caused by: javax.naming.AuthenticationException: [LDAP: error code 49 - Invalid Credentials]
	at com.sun.jndi.ldap.LdapCtx.mapErrorCode(Unknown Source)
       .....
       
	at org.jboss.seam.security.management.LdapIdentityStore.authenticate(LdapIdentityStore.java:420)
	... 77 more

Este erro ocorre sempre seja qual for a bind-credentials esteja ela correcta ou errada, poderá ser um problema de encriptação?? :?

Se alguém tiver conhecimentos nesta área que possa ajudar…

Obrigado :slight_smile:

pcaeiro,

Estou tentando implementar um webservice que faça autenticação no LDAP usando o Seam Framework, porém ainda não consegui implementá-lo pois não achei exemplos que me ajudassem.
Como você implementou a classe de autenticação? O que precisou configurar?

Att,
Eduardo

Cara,

O erro tá sendo o seguinte, para fazer autenticação em ldap você tem que acessar com uma conta de administrador veja seu erro e leia:

Caused by: javax.naming.AuthenticationException: [LDAP: error code 49 - Invalid Credentials]

credencial inválida, porque ? claro: você não especificou a conta de um administrador do ldap.

<security:ldap-identity-store    name="ldapIdentityStore"   
                                server-address="sedna.cmarl.pt"   
                                server-port="389"   
                                user-DN-prefix="uid="   
                                user-DN-suffix=",ou=Users,dc=cmarl,dc=pt"   
                                user-context-DN="ou=Users,dc=cmarl,dc=pt"   
                                user-password-attribute="[b]Aqui vai a senha do administrador[/b]"                                     
                                bind-DN="cn=Manager,dc=cmarl,dc=pt"   
                                bind-credentials="secret"                                     
                                user-object-classes="person,uidObject"/>   
                                   
  
  <security:identity-manager identity-store="#{ldapIdentityStore}"/>  

Veja na documentação onde colocar o usuário que não me lembro, mas a resposta é esta.

Viva Eduardo,

basta seguir o link que coloquei ai no meu primeiro post está tudo aí.

quanto ao à classe de autenticação não é necessária pois o seam faz tudo por você basta apenas desactivar a chamada do método authenticate no components.xml

<!--  <security:identity authenticate-method="#{authenticator.authenticate}"
 					remember-me="true"/> -->
 					
					
  <security:ldap-identity-store 	name="ldapIdentityStore"
    							  	server-address="sedna.cmarl.pt"
    								server-port="389"
    								bind-DN="cn=Manager,dc=cmarl,dc=pt"
    								bind-credentials="secret"
    								user-DN-prefix="uid="
    								user-DN-suffix=",ou=Users,dc=cmarl,dc=pt"
    								user-context-DN="ou=Users,dc=cmarl,dc=pt"
    								user-password-attribute="userPassword" 
    								user-role-attribute="memberUid"  								
    								role-DN-prefix="cn="
    								role-DN-suffix=",ou=Groups,dc=cmarl,dc=pt"
    								role-context-DN="ou=Groups,dc=cmarl,dc=pt"
    								    								   																  								   								
    								   									
    								/>  
     <security:identity-manager identity-store="#{ldapIdentityStore}"/> 

atenção que a primeira linha está desactivada

depois é só por a andar… :slight_smile:

Vou aproveita e responder ao Carlos também,

na verdade o meu erro aqui tem a ver com o

user-DN-prefix="uid="  

pois o Ldap que estou a usar foi construído definindo o cn como o campo que identifica cada utilizador e não o uid como eu pretendia por essa razão ele não reconhecia os utilizadores.
assim tenho várias hipóteses ou utilizo o cn em vez do uid para autenticação o que não é muito recomendável, ou altero o Ldap para que cada user se identifique através do uid ou ainda contorno essa situação através de código, no entanto penso que vou alterar o Ldap até porque este assim ficará mais arrumado.

No entanto muito obrigado pela sua resposta, :wink:

Paulo