• Error AUTH LDAP OpenKM-6.2.1

  • OpenKM tiene muchas características interesantes, pero es necesario un proceso de configuración para mostrar todo su potencial.
OpenKM tiene muchas características interesantes, pero es necesario un proceso de configuración para mostrar todo su potencial.
Forum rules: Por favor, antes de preguntar algo consulta el wiki de documentación o utiliza la función de búsqueda del foro. Recuerda que no tenemos una bola de cristal ni poderes mentales, o sea que que para informar sobre un error es necesario que nos indiques tanto la versión de OpenKM que usas como la del navegador y sistema operativo. Para más información consulta Cómo informar de fallos de forma efectiva.
 #20575  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
 #20596  by jllort
 
Mejor que utilices la configuracion avanzada ( la simple para active directory de microsoft va bien, pero sirve para poco mas )
 #20784  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
 #20963  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 )
 #20973  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
 #20997  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.
 #21028  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
 #21065  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)))

About Us

OpenKM is part of the management software. A management software is a program that facilitates the accomplishment of administrative tasks. OpenKM is a document management system that allows you to manage business content and workflow in a more efficient way. Document managers guarantee data protection by establishing information security for business content.