Page 1 of 1

Error AUTH LDAP OpenKM-6.2.1

PostPosted:Thu Jan 03, 2013 6:11 pm
by agm
Hola,

Primero que nada sugiero cambiar en http://wiki.openkm.com/index.php/Active ... OpenKM_6.2 primera linea: de "$TOMCAT_HOME/lib/log4j.properties" a "$TOMCAT_HOME/conf/log4j.properties" (al menos en la OpenKM-6.2.1)

Ahora comparto mi problema: A nivel de aplicación (parámetros de LDAP dentro del panel administrativo de la aplicación) la configuración LDAP parece funcionar correctamente, ya que me autentico con usuario administrador y puedo los demás usuarios de mi LDAP. Sin embargo, a nivel de autenticación (OpenKM.xml TOMCAT) me da el siguiente error (habilitando el debuging):
Code: Select all
2013-01-03 13:17:22,277 [ajp-bio-127.0.0.1-8009-exec-2] DEBUG org.springframework.security.ldap.authentication.LdapAuthenticationProvider - Processing authentication request for user: agm
2013-01-03 13:17:22,278 [ajp-bio-127.0.0.1-8009-exec-2] DEBUG org.springframework.security.ldap.search.FilterBasedLdapUserSearch - Searching for user 'agm', with user search [ searchFilter: '(&(objectClass=PosixAccount)(shadowFlag=1)(uid={0}))', searchBase: 'ou=Usuarios,dc=usb,dc=ve', scope: subtree, searchTimeLimit: 0, derefLinkFlag: false ]
2013-01-03 13:17:22,342 [ajp-bio-127.0.0.1-8009-exec-2] DEBUG org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter - Authentication request failed: org.springframework.security.authentication.AuthenticationServiceException: [LDAP: error code 32 - No Such Object]; nested exception is javax.naming.NameNotFoundException: [LDAP: error code 32 - No Such Object]; remaining name 'ou=Usuarios,dc=usb,dc=ve'
2013-01-03 13:17:22,343 [ajp-bio-127.0.0.1-8009-exec-2] DEBUG org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter - Updated SecurityContextHolder to contain null Authentication

Mi configuración en OpenKM.xml es:
Code: Select all

    <security:ldap-server id="ldapServer" url="ldap://ldap.usb.ve:389/ou=Usuarios,dc=usb,dc=ve"
        manager-dn="cn=auth,ou=accounts,ou=Admins,ou=Usuarios,dc=usb,dc=ve" manager-password="pass123456"/>

  <security:authentication-manager alias="authenticationManager">
    <security:ldap-authentication-provider
      server-ref="ldapServer"
      user-search-base="ou=Usuarios,dc=usb,dc=ve"
      user-search-filter="(&(objectClass=PosixAccount)(shadowFlag=1)(uid={0}))"
      group-search-base="ou=OpenKM,ou=Apps,dc=usb,dc=ve"
      group-search-filter="(memberUid={0})"
      group-role-attribute="cn"
      role-prefix="none">
    </security:ldap-authentication-provider>
  </security:authentication-manager>
</beans:beans>
¿Alguna idea de por qué pueda estar sucediendo esto? Puedo realizar las busquedas utilizando LDAP search y tengo éxito... además me autentico perfectamente con otras aplicaciones.
Code: Select all
ldapsearch -h ldap.usb.ve -b "ou=Usuarios,dc=usb,dc=ve" -D cn=auth,ou=accounts,ou=Admins,ou=Usuarios,dc=usb,dc=ve -w pass123456 "(&(objectClass=PosixAccount)(shadowFlag=1)(uid=agm))"
Muchas gracias por su tiempo, seguiré indagando a ver si llego a algo.

Saludos

Re: Error AUTH LDAP OpenKM-6.2.1

PostPosted:Fri Jan 04, 2013 6:14 pm
by jllort
Mejor que utilices la configuracion avanzada ( la simple para active directory de microsoft va bien, pero sirve para poco mas )

Re: Error AUTH LDAP OpenKM-6.2.1

PostPosted:Wed Jan 16, 2013 8:12 pm
by agm
jllort wrote:Mejor que utilices la configuracion avanzada ( la simple para active directory de microsoft va bien, pero sirve para poco mas )
Hola, aquí paso la configuración avanzada. Estoy teniendo un problema obteniendo los grupos ROLE_ADMIN y ROLE_USER con el LDAP debido a que obtengo:
Code: Select all
[LDAP: error code 32 - No Such Object]; nested exception is javax.naming.NameNotFoundException: [LDAP: error code 32 - No Such Object]; remaining name 'ou=OpenKM,ou=Apps,dc=usb,dc=ve'
En mi estructura LDAP tengo bajo ou=OpenKM:
Code: Select all
dn: cn=ROLE_ADMIN,ou=OpenKM,ou=Apps,dc=usb,dc=ve
cn: ROLE_ADMIN
description: Grupo de administradores del OpenKM
gidnumber: 100001
memberuid: agm
memberuid: test
objectclass: posixGroup
objectclass: top

dn: cn=ROLE_USER,ou=OpenKM,ou=Apps,dc=usb,dc=ve
cn: ROLE_USER
description: Grupo de usuarios por defecto del OpenKM
gidnumber: 100002
memberuid: test
memberuid: agm
memberuid: jpaez
objectclass: posixGroup
objectclass: top

Code: Select all
<security:authentication-manager alias="authenticationManager">
  <security:authentication-provider ref="ldapAuthProvider" />
</security:authentication-manager>

<beans:bean id="contextSource" class="org.springframework.security.ldap.DefaultSpringSecurityContextSource">
  <beans:constructor-arg value="ldap://ldap.usb.ve:389/ou=Usuarios,dc=usb,dc=ve"/>
  <beans:property name="userDn" value="cn=auth,ou=accounts,ou=Admins,ou=Usuarios,dc=usb,dc=ve"/>
  <beans:property name="password" value="pass123456"/>
</beans:bean>

<beans:bean id="ldapAuthProvider" class="org.springframework.security.ldap.authentication.LdapAuthenticationProvider">
  <beans:constructor-arg>
    <beans:bean class="org.springframework.security.ldap.authentication.BindAuthenticator">
      <beans:constructor-arg ref="contextSource"/>
      <beans:property name="userSearch" ref="userSearch"/>
    </beans:bean>
  </beans:constructor-arg>
  <beans:constructor-arg>
    <beans:bean class="org.springframework.security.ldap.userdetails.DefaultLdapAuthoritiesPopulator">
      <beans:constructor-arg ref="contextSource"/>
      <!-- <beans:constructor-arg value=""/> -->
      <beans:constructor-arg value="ou=OpenKM,ou=Apps,dc=usb,dc=ve" />
      <beans:property name="groupSearchFilter" value="(memberUid={0})"/>
      <beans:property name="groupRoleAttribute" value="cn"/>
      <beans:property name="searchSubtree" value="true" />
      <beans:property name="convertToUpperCase" value="false" />
      <beans:property name="rolePrefix" value="" />
    </beans:bean>
  </beans:constructor-arg>
</beans:bean>
 
<beans:bean id="userSearch" class="org.springframework.security.ldap.search.FilterBasedLdapUserSearch">
  <beans:constructor-arg index="0" value="" />
  <beans:constructor-arg index="1" value="(&(objectClass=PosixAccount)(shadowFlag=1)(uid={0}))" />
  <beans:constructor-arg index="2" ref="contextSource" />
  <beans:property name="searchSubtree" value="true" />
</beans:bean>
Cualquier duda/sugerencia/lectura es bienvenida.

Saludos

Re: Error AUTH LDAP OpenKM-6.2.1

PostPosted:Fri Jan 18, 2013 7:01 pm
by jllort
Esto
Code: Select all
<beans:constructor-arg value="ldap://ldap.usb.ve:389/ou=Usuarios,dc=usb,dc=ve"/>
Mejor así:
Code: Select all
<beans:constructor-arg value="ldap://ldap.usb.ve:389"/>
Y después modificar
Code: Select all
<beans:constructor-arg index="0" value="" />
Por
Code: Select all
<beans:constructor-arg index="0" value="ou=Usuarios,dc=usb,dc=ve" />
Hasta aquí la configuración es mas correcta. Es posible que esto tenga que ser de esta forma, depende un poco de tu ldap pero yo creo que por lo que has puesto es un openldap si este es el caso también modificaría esto:
Code: Select all
<beans:property name="groupSearchFilter" value="memberUid={1}"/>
Nota para entender el error al poner el login en ldap://ldap.usb.ve:389/ou=Usuarios,dc=usb,dc=ve le estas diciendo qeu todos los nodos cuelga de aqui y claro cuando llega al caso de los roles entonces el path seria algo como ou=OpenKM,ou=Apps,dc=usb,dc=ve,ou=Usuarios,dc=usb,dc=ve y eso peta fijo. Cuando tengas la configuración completa funcionando si quieres metemos en la sección de la wiki tu ejemplo completo ( modificando obviamente algunos valores que deben resultar privados )

Re: Error AUTH LDAP OpenKM-6.2.1

PostPosted:Sat Jan 19, 2013 12:05 am
by agm
Me funcionó perfecto, era eso. De verdad que muchas gracias. Por supuesto que pueden copiar "mi" configuración al wiki.

Tengo un par de dudas conceptuales:

- ¿Por qué integrar el LDAP a nivel de aplicación (a parte de OpenKM.xml)? Ya estoy metiendo en el LDAP los usuarios con sus roles.
- Cada vez que deba agregar un rol creo la rama en el LDAP y luego el rol con igual nombre en la aplicación. ¿Correcto?
- Absolutamente todos los usuarios añadidos a un rol en el LDAP deben primero ser agregados al ROLE_USER y seguidamente al rol que queremos que pertenezca ¿Correcto?

Saludos

Re: Error AUTH LDAP OpenKM-6.2.1

PostPosted:Sun Jan 20, 2013 7:28 pm
by jllort
1- A parte del OpenKM.xml se integran para que puedan aparecer en la listas de desplegables de la aplicación cuando asignas roles o usuarios ( popup de seguridad o de notificación ) y para que aparezcan en la administracion.
2- Puedes crear roles donde quieras, no hay problema. En funcion del filtrado que utilices en el OpenKM.xml estos roles tendran efecto o no. Esa es la idea ( esto del ldap es un tema complicado y no hay dos iguales, gradualmente en la wiki quiero ir poniendo ejemplo para que la gente lo entienda mejor ).
3- Efectivamente todos tienen que tener el ROLE_USER
4- Cuando lo tengas configurado envianos un zip en el foro mismamente y lo publicaremos en la wiki.

Re: Error AUTH LDAP OpenKM-6.2.1

PostPosted:Tue Jan 22, 2013 3:50 pm
by agm
Estoy tratando de probar el testLdap.jar [0] pero me da el siguiente error al ejecutarlo:
Code: Select all
Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
        at com.openkm.test.Config.<clinit>(Config.java:16)
        at com.openkm.test.Main.main(Main.java:16)
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
        at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
        ... 2 more
Dado que no logré usar el testLdap.jar, he estado probando configuraciones LDAP que tengo desde la versión 5 y aplicando ensayo y error. Alfin creo haber logrado hacerlo funcionar pero tengo una observación: Mi LDAP está enbasurado (porque es de pruebas) con más de 1000 usuarios testN donde N va del 0 al 1100. Logro ver en el panel administrativo a todos esos usuarios testN pero... apenas me autentico al OpenKM dura casi un minuto terminando de cargar el "OpenKM/frontend/index.jsp" debido a que se trae/carga toda la lista de usuarios del LDAP. ¿Existe una forma de evitar esto? Cada vez que me autentico con cualquier usuario hay que esperar demasiado a que cargue la primera vez.

Saludos y gracias.

[0] http://www.openkm.com/download/okm/OpenKM-6.2-LDAP.zip

Re: Error AUTH LDAP OpenKM-6.2.1

PostPosted:Thu Jan 24, 2013 4:18 pm
by jllort
En la versión profesional si que se puede hacer. En la comunity es tal y como tu explicas. De todas formas lo que tienes que hacer es aplicar un filtro en los usuarios para solo sacar aquellos que son miembros de ROLE_USER o ROLE_ADMIN, esto en la wiki esta explicado:

http://wiki.openkm.com/index.php/Active ... OpenKM_6.2
Code: Select all
principal.ldap.user.search.filter=(&(objectclass=person) (|(memberOf=CN=ROLE_USER,CN=users,dc=weyler,dc=local)(memberOf=CN=ROLE_ADMIN,CN=users,dc=weyler,dc=local)))