• OpenKM y Active Directory

  • Problemas con la instalación de OpenKM? No problemo, la solución está más cerca de lo que piensas.
Problemas con la instalación de OpenKM? No problemo, la solución está más cerca de lo que piensas.
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.
 #44252  by jorge.ibanez
 
Buenos días,

He instalado OpenKM 6.3.2 siguiendo los pasos que indica la documentación y funciona todo correctamente.

Ahora estoy intentando integrarlo con AD, he seguido los pasos de la documentación. En el panel de administración he conseguido llegar a ver los usuarios del dominio a los cuales quiero dar permisos de acceso pero a la hora de modificar el fichero OpenKM.xml e intentar loguearme con un usuario del dominio me aparece el siguiente error:
Code: Select all
2017-07-07 12:03:20,883 [http-bio-0.0.0.0-8080-exec-5] ERROR org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/OpenKM].[default]- Servlet.service() para servlet default lanzó excepción
org.springframework.dao.IncorrectResultSizeDataAccessException: Incorrect result size: expected 1, actual 3
        at org.springframework.security.ldap.SpringSecurityLdapTemplate.searchForSingleEntryInternal(SpringSecurityLdapTemplate.java:243)
        at org.springframework.security.ldap.SpringSecurityLdapTemplate$3.executeWithContext(SpringSecurityLdapTemplate.java:198)
        at org.springframework.ldap.core.LdapTemplate.executeWithContext(LdapTemplate.java:807)
        at org.springframework.ldap.core.LdapTemplate.executeReadOnly(LdapTemplate.java:793)
        at org.springframework.security.ldap.SpringSecurityLdapTemplate.searchForSingleEntry(SpringSecurityLdapTemplate.java:196)
        at org.springframework.security.ldap.search.FilterBasedLdapUserSearch.searchForUser(FilterBasedLdapUserSearch.java:116)
        at org.springframework.security.ldap.authentication.BindAuthenticator.authenticate(BindAuthenticator.java:90)
        at org.springframework.security.ldap.authentication.LdapAuthenticationProvider.doAuthentication(LdapAuthenticationProvider.java:178)
        at org.springframework.security.ldap.authentication.AbstractLdapAuthenticationProvider.authenticate(AbstractLdapAuthenticationProvider.java:61)
        at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:156)
        at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:174)
        at org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter.attemptAuthentication(UsernamePasswordAuthenticationFilter.java:94)
        at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:194)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
        at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
        at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:173)
        at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
        at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:315)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:745)
Este es mi fichero OpenKM.xm, aclarar que los ROLE_ADMIN y ROLE_USER son dos grupos de mi AD en los cuales meto los usuarios y cuyo objetivo es que los permisos en la aplicación se establezcan mediante estos grupos:
Code: Select all
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns:beans="http://www.springframework.org/schema/beans"
             xmlns:security="http://www.springframework.org/schema/security"
             xmlns:task="http://www.springframework.org/schema/task"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://www.springframework.org/schema/beans
                                 http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
                                 http://www.springframework.org/schema/security
                                 http://www.springframework.org/schema/security/spring-security-3.1.xsd
                                 http://www.springframework.org/schema/task
                                 http://www.springframework.org/schema/task/spring-task-3.1.xsd">

<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://172.16.0.20"/>
  <beans:property name="userDn" value="CN=Sistemas TIC,CN=Users,DC=sisifo,DC=this"/>
  <beans:property name="password" value="MICONTRASEÑA"/>
  <beans:property name="baseEnvironmentProperties">
     <beans:map>
        <beans:entry>
          <beans:key>
            <beans:value>java.naming.referral</beans:value>
	  </beans:key>
          <beans:value>follow</beans:value>
        </beans:entry>
      </beans:map>
   </beans:property>
</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="DC=sisifo,DC=this"/>
      <beans:property name="groupSearchFilter" value="member={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="OU=ou_scati,DC=sisifo,DC=this" />
  <beans:constructor-arg index="1" value="(&amp;(objectclass=user)(|(memberOf=CN=ROLE_ADMIN,OU=ou_gg_sc,OU=ou_scati,DC=sisifo,DC=this)(memberOf=CN=ROLE_USER,OU=ou_gg_s$
  <beans:constructor-arg index="2" ref="contextSource" />
  <beans:property name="searchSubtree" value="true" />
</beans:bean>

</beans:beans>


¿Podéis echarme una mano?

Muchas gracias

Un Saludo
 #44261  by jllort
 
Primero, te aconsejamos que instales la version 6.3.4 que es la última ( en vez de la 6.3.2 )
Segundo, mejor que empezar por configurar los parametros de openkm ( listas de usuarios y roles ) y una vez esto lo tengas funcionando correctamente entonces te puedes lanzar con el OpenKM.xml ( esto te dará menos problemas )

Utiliza esta configuración como referencia https://docs.openkm.com/kcenter/view/ok ... roles.html

Fíjate que el problema es que deberías tener un resultado para la consulta y tienes 3, esto es debido a que esto es incorrecto:
Code: Select all
 <beans:constructor-arg index="1" value="(&amp;(objectclass=user)(|(memberOf=CN=ROLE_ADMIN,OU=ou_gg_sc,OU=ou_scati,DC=sisifo,DC=this)(memberOf=CN=ROLE_USER,OU=ou_gg_sc,OU=ou_scati,DC=sisifo,DC=this)))
Debería ser algo parecido a esto ( el user id en ldap viene determinado por el atributo sAMAccountName ):
Code: Select all
<beans:constructor-arg index="1" value="(&amp;(sAMAccountName={0})(|(memberOf=CN=ROLE_ADMIN,OU=ou_gg_sc,OU=ou_scati,DC=sisifo,DC=this)(memberOf=CN=ROLE_USER,OU=ou_gg_sc,OU=ou_scati,DC=sisifo,DC=this)))" />
 #44268  by jorge.ibanez
 
Muchísimas gracias, era únicamente la linea que me has indicado, la he modificado y ha comenzado a funcionar correctamente.

Adicionalmente he actualizado a la versión 6.3.4 y todo perfecto.

Muchas gracias por la ayuda, da gusto contar con foreros así.
 #51874  by JuankNet
 
uena tarde, solicito su amable ayuda con la integracion a LDAP, instale bien la version 6.3.9 en Windows 2012 Server R2 Standar y BD Mysql. Logro ver los usuarios al modificar la configuracion. pero me sale Authentication error, a la hora de ingresar los usuario de Dominio.
Ya cree los grupos Role_admin y Role_user y agregue los usuarios que deseo ingresen al sistema.

Este en mi archivo Open.xml
Code: Select all
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns:beans="http://www.springframework.org/schema/beans"
             xmlns:security="http://www.springframework.org/schema/security"
             xmlns:task="http://www.springframework.org/schema/task"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns:amq="http://activemq.apache.org/schema/core"
             xsi:schemaLocation="http://www.springframework.org/schema/beans
                                 http://www.springframework.org/schema/beans/spring-beans.xsd
                                 http://www.springframework.org/schema/security
                                 http://www.springframework.org/schema/security/spring-security.xsd
                                 http://www.springframework.org/schema/task
                                 http://www.springframework.org/schema/task/spring-task.xsd">

  <!-- Security configuration -->
	<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://192.168.0.30"/>
  <beans:property name="userDn" value="CN=Administrator,CN=Users,DC=xxxx,DC=com,DC=co,DC=local"/>
  <beans:property name="password" value="passs"/>
  <beans:property name="baseEnvironmentProperties">
     <beans:map>
        <beans:entry>
          <beans:key>
            <beans:value>java.naming.referral</beans:value>
	      </beans:key>
          <beans:value>follow</beans:value>
        </beans:entry>
      </beans:map>
   </beans:property>
</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="DC=xxxx,DC=com,DC=co,DC=local"/>
      <beans:property name="groupSearchFilter" value="member={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="DC=xxxx,DC=com,DC=co,DC=local" />
 <beans:constructor-arg index="1" value="(&amp;(sAMAccountName={0})(|(memberOf=CN=ROLE_ADMIN,OU=Aplicaciones,OU=Tecnologia,OU=Usuarios,DC=xxx,DC=com,DC=co,DC=local)(memberOf=CN=ROLE_USER,OU=Aplicaciones,OU=Tecnologia,OU=Usuarios,DC=xxx,DC=com,DC=co,DC=local)))" />
  <beans:constructor-arg index="2" ref="contextSource" />
  <beans:property name="searchSubtree" value="true" />
</beans:bean>

</beans:beans>
Agradezco cualquier tipo de ayuda..
 #51908  by jllort
 
Simplifica esta parte ( ya la pones después, esto te permitirá descartar que el problema no esta en el filtro por roles)
Code: Select all
<beans:constructor-arg index="1" value="(&amp;(sAMAccountName={0})(|(memberOf=CN=ROLE_ADMIN,OU=Aplicaciones,OU=Tecnologia,OU=Usuarios,DC=xxx,DC=com,DC=co,DC=local)(memberOf=CN=ROLE_USER,OU=Aplicaciones,OU=Tecnologia,OU=Usuarios,DC=xxx,DC=com,DC=co,DC=local)))" />
por
Code: Select all
<beans:constructor-arg index="1" value="sAMAccountName={0}" />
En paralelo prueba con el fichero de hosts ( a veces el servidor de dominos no termina de estar perfectamente configurado y la aplicación tiene problemas en resolver dominios, internamente cuando resuelve DC=xxx,DC=com,DC=co,DC=local -> lo que esta haciendo es buscar en la red xxx.com.co.local que tendría que apuntar al AD):
https://docs.openkm.com/kcenter/view/ok ... bletologin

He repasado el XML y no le veo problemas. Seria interesante ver si en el fichero openkm.log te aparece algun tipo de error, como este de aquí https://docs.openkm.com/kcenter/view/ok ... mematching ( últimamente microsoft está forzando a que las conexiones contra el AD sean por fuerza con SSL -> igual depués de una actualización es lo que podría estar sucediendo )

Recuerda que para que los cambios tenga efecto tienes que reiniciar el servicio
 #51935  by JuankNet
 
Gracias por responder Jllort,

Hice los cambios sugeridos y este es el error q muestra el log de Catalina.
Code: Select all
13-Dec-2020 22:12:31.908 INFO [http-nio-0.0.0.0-80-exec-3] org.springframework.security.ldap.SpringSecurityLdapTemplate.searchForSingleEntryInternal Ignoring PartialResultException
13-Dec-2020 22:12:32.065 SEVERE [http-nio-0.0.0.0-80-exec-3] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [default] in context with path [/OpenKM] threw exception
 org.springframework.ldap.PartialResultException: nested exception is javax.naming.PartialResultException [Root exception is javax.naming.CommunicationException: TAPI3Directory.xxx.com.co.local:389 [Root exception is java.net.UnknownHostException: TAPI3Directory.xxx.com.co.local]]
	at org.springframework.ldap.support.LdapUtils.convertLdapException(LdapUtils.java:205)
	at org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:314)
	at org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:258)
	at org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:605)
	at org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:523)
	at org.springframework.security.ldap.SpringSecurityLdapTemplate.searchForSingleAttributeValues(SpringSecurityLdapTemplate.java:171)
	at org.springframework.security.ldap.userdetails.DefaultLdapAuthoritiesPopulator.getGroupMembershipRoles(DefaultLdapAuthoritiesPopulator.java:215)
	at org.springframework.security.ldap.userdetails.DefaultLdapAuthoritiesPopulator.getGrantedAuthorities(DefaultLdapAuthoritiesPopulator.java:185)
	at org.springframework.security.ldap.authentication.LdapAuthenticationProvider.loadUserAuthorities(LdapAuthenticationProvider.java:197)
	at org.springframework.security.ldap.authentication.AbstractLdapAuthenticationProvider.authenticate(AbstractLdapAuthenticationProvider.java:82)
	at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:156)
	at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:177)
	at org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter.attemptAuthentication(UsernamePasswordAuthenticationFilter.java:92)
	at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:211)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:50)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:106)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)
	at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160)
	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:343)
	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:260)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:800)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:806)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Unknown Source)
Caused by: javax.naming.PartialResultException [Root exception is javax.naming.CommunicationException: TAPI3Directory.xxx.com.co.local:389 [Root exception is java.net.UnknownHostException: TAPI3Directory.elpais.com.co.local]]
	at com.sun.jndi.ldap.AbstractLdapNamingEnumeration.hasMoreImpl(Unknown Source)
	at com.sun.jndi.ldap.AbstractLdapNamingEnumeration.hasMoreReferrals(Unknown Source)
	at com.sun.jndi.ldap.AbstractLdapNamingEnumeration.hasMoreImpl(Unknown Source)
	at com.sun.jndi.ldap.AbstractLdapNamingEnumeration.hasMoreReferrals(Unknown Source)
	at com.sun.jndi.ldap.AbstractLdapNamingEnumeration.hasMoreImpl(Unknown Source)
	at com.sun.jndi.ldap.AbstractLdapNamingEnumeration.hasMoreReferrals(Unknown Source)
	at com.sun.jndi.ldap.AbstractLdapNamingEnumeration.hasMoreImpl(Unknown Source)
	at com.sun.jndi.ldap.AbstractLdapNamingEnumeration.hasMoreReferrals(Unknown Source)
	at com.sun.jndi.ldap.AbstractLdapNamingEnumeration.hasMoreImpl(Unknown Source)
	at com.sun.jndi.ldap.AbstractLdapNamingEnumeration.hasMore(Unknown Source)
	at org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:294)
	... 41 more
Caused by: javax.naming.CommunicationException: TAPI3Directory.xxx.com.co.local:389 [Root exception is java.net.UnknownHostException: TAPI3Directory.elpais.com.co.local]
	at com.sun.jndi.ldap.LdapReferralContext.<init>(Unknown Source)
	at com.sun.jndi.ldap.LdapReferralException.getReferralContext(Unknown Source)
	at com.sun.jndi.ldap.AbstractLdapNamingEnumeration.hasMoreReferrals(Unknown Source)
	... 52 more
Caused by: java.net.UnknownHostException: TAPI3Directory.elpais.com.co.local
	at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
	at java.net.PlainSocketImpl.connect(Unknown Source)
	at java.net.SocksSocketImpl.connect(Unknown Source)
	at java.net.Socket.connect(Unknown Source)
	at java.net.Socket.connect(Unknown Source)
	at java.net.Socket.<init>(Unknown Source)
	at java.net.Socket.<init>(Unknown Source)
	at com.sun.jndi.ldap.Connection.createSocket(Unknown Source)
	at com.sun.jndi.ldap.Connection.<init>(Unknown Source)
	at com.sun.jndi.ldap.LdapClient.<init>(Unknown Source)
	at com.sun.jndi.ldap.LdapClientFactory.createPooledConnection(Unknown Source)
	at com.sun.jndi.ldap.pool.Connections.<init>(Unknown Source)
	at com.sun.jndi.ldap.pool.Pool.getPooledConnection(Unknown Source)
	at com.sun.jndi.ldap.LdapPoolManager.getLdapClient(Unknown Source)
	at com.sun.jndi.ldap.LdapClient.getInstance(Unknown Source)
	at com.sun.jndi.ldap.LdapCtx.connect(Unknown Source)
	at com.sun.jndi.ldap.LdapCtx.<init>(Unknown Source)
	at com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(Unknown Source)
	at com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(Unknown Source)
	at com.sun.jndi.url.ldap.ldapURLContextFactory.getObjectInstance(Unknown Source)
	at javax.naming.spi.NamingManager.getURLObject(Unknown Source)
	at javax.naming.spi.NamingManager.processURL(Unknown Source)
	at javax.naming.spi.NamingManager.processURLAddrs(Unknown Source)
	at javax.naming.spi.NamingManager.getObjectInstance(Unknown Source)
	... 55 more
Como puedes observar sigo sin poder ingresar con algún usuario del dominio. Cabe notar que revise como lo sugeriste el openkm.xml y no encuentro evidencia del error que mencionas.

Te dejo las lineas de error del openkm.xml:
Code: Select all
Target exception: java.lang.NullPointerException

2020-12-15 14:52:22,444 [http-nio-0.0.0.0-80-exec-9] [] ERROR c.o.principal.LdapPrincipalAdapter - NamingException: null (Cache: com.openkm.cache.ldapPrincipalAdapter.general - Key: getUsers - Base: [DC=xxx,DC=com,DC=co,DC=local] - Filter: (&(objectclass=user)(|(memberOf=CN=ROLE_ADMIN,OU=Groups,DC=xxx,DC=com,DC=co,DC=local)(memberOf=CN=ROLE_USER,OU=Groups,DC=xxx,DC=com,DC=co,DC=local))) - Attribute: sAMAccountName)
2020-12-15 14:52:22,444 [http-nio-0.0.0.0-80-exec-9] [] ERROR c.o.principal.LdapPrincipalAdapter - NamingException: null (Cache: com.openkm.cache.ldapPrincipalAdapter.general - Key: getRolesByUser:Administrator - Base: [DC=xxx,DC=com,DC=co,DC=local] - Filter: (&(objectclass=user)(sAMAccountName=Administrator)) - Attribute: memberOf)
2020-12-15 14:52:22,444 [http-nio-0.0.0.0-80-exec-9] [] ERROR c.o.principal.LdapPrincipalAdapter - NamingException: null (Cache: com.openkm.cache.ldapPrincipalAdapter.general - Key: getMail:Administrator - Base: [DC=xxx,DC=com,DC=co,DC=local] - Filter: (sAMAccountName=Administrator) - Attribute: userPrincipalName)
2020-12-15 14:52:22,460 [http-nio-0.0.0.0-80-exec-9] [] ERROR c.o.principal.LdapPrincipalAdapter - NamingException: null (Cache: com.openkm.cache.ldapPrincipalAdapter.general - Key: getRolesByUser:jcbustamante - Base: [DC=xxx,DC=com,DC=co,DC=local] - Filter: (&(objectclass=user)(sAMAccountName=jcbustamante)) - Attribute: memberOf)
2020-12-15 14:52:22,460 [http-nio-0.0.0.0-80-exec-9] [] ERROR c.o.principal.LdapPrincipalAdapter - NamingException: null (Cache: com.openkm.cache.ldapPrincipalAdapter.general - Key: getMail:jcbustamante - Base: [DC=xxx,DC=com,DC=co,DC=local] - Filter: (sAMAccountName=jcbustamante) - Attribute: userPrincipalName)
2020-12-15 14:52:22,476 [http-nio-0.0.0.0-80-exec-9] [] ERROR c.o.principal.LdapPrincipalAdapter - NamingException: null (Cache: com.openkm.cache.ldapPrincipalAdapter.general - Key: getRolesByUser:oasandoval - Base: [DC=xxx,DC=com,DC=co,DC=local] - Filter: (&(objectclass=user)(sAMAccountName=oasandoval)) - Attribute: memberOf)
2020-12-15 14:52:22,476 [http-nio-0.0.0.0-80-exec-9] [] ERROR c.o.principal.LdapPrincipalAdapter - NamingException: null (Cache: com.openkm.cache.ldapPrincipalAdapter.general - Key: getMail:oasandoval - Base: [DC=xxx,DC=com,DC=co,DC=local] - Filter: (sAMAccountName=oasandoval) - Attribute: userPrincipalName)
2020-12-15 14:52:22,476 [http-nio-0.0.0.0-80-exec-9] [] ERROR c.o.principal.LdapPrincipalAdapter - NamingException: null (Cache: com.openkm.cache.ldapPrincipalAdapter.general - Key: getRolesByUser:Administrador - Base: [DC=xxx,DC=com,DC=co,DC=local] - Filter: (&(objectclass=user)(sAMAccountName=Administrador)) - Attribute: memberOf)
2020-12-15 14:52:22,476 [http-nio-0.0.0.0-80-exec-9] [] ERROR c.o.principal.LdapPrincipalAdapter - NamingException: null (Cache: com.openkm.cache.ldapPrincipalAdapter.general - Key: getMail:Administrador - Base: [DC=xxx,DC=com,DC=co,DC=local] - Filter: (sAMAccountName=Administrador) - Attribute: userPrincipalName)
2020-12-15 14:52:22,476 [http-nio-0.0.0.0-80-exec-9] [] ERROR c.o.principal.LdapPrincipalAdapter - NamingException: null (Cache: com.openkm.cache.ldapPrincipalAdapter.general - Key: getRolesByUser:okmadmin - Base: [DC=xxx,DC=com,DC=co,DC=local] - Filter: (&(objectclass=user)(sAMAccountName=okmadmin)) - Attribute: memberOf)
2020-12-15 14:52:22,491 [http-nio-0.0.0.0-80-exec-9] [] ERROR c.o.principal.LdapPrincipalAdapter - NamingException: null (Cache: com.openkm.cache.ldapPrincipalAdapter.general - Key: getMail:okmadmin - Base: [DC=xxx,DC=com,DC=co,DC=local] - Filter: (sAMAccountName=okmadmin) - Attribute: userPrincipalName)
2020-12-15 14:52:22,491 [http-nio-0.0.0.0-80-exec-9] [] ERROR c.o.principal.LdapPrincipalAdapter - NamingException: null (Cache: com.openkm.cache.ldapPrincipalAdapter.general - Key: getRolesByUser:appuser - Base: [DC=xxx,DC=com,DC=co,DC=local] - Filter: (&(objectclass=user)(sAMAccountName=appuser)) - Attribute: memberOf)
2020-12-15 14:52:22,491 [http-nio-0.0.0.0-80-exec-9] [] ERROR c.o.principal.LdapPrincipalAdapter - NamingException: null (Cache: com.openkm.cache.ldapPrincipalAdapter.general - Key: getMail:appuser - Base: [DC=xxx,DC=com,DC=co,DC=local] - Filter: (sAMAccountName=appuser) - Attribute: userPrincipalName)
2020-12-15 14:54:02,725 [http-nio-0.0.0.0-80-exec-4] [] INFO  com.openkm.spring.LoggerListener - Authentication ERROR: xxx\jcbustamante
Como puedes observar aparecen los usuarios que hice parte de los grupos ROLE_Admin y ROLE_User, pero cuando intento ingresar con alguno da error. Incluso con el usuario okmAdmin que viene por defecto, tambien sale error cosa que no pasa cuando dejo el openkm.xml por defecto, en ese caso si ingreso sin problemas solo con okmAdmin.
Code: Select all
<beans:constructor-arg index="1" value="sAMAccountName={0}" />
En paralelo prueba con el fichero de hosts ( a veces el servidor de dominos no termina de estar perfectamente configurado y la aplicación tiene problemas en resolver dominios, internamente cuando resuelve DC=xxx,DC=com,DC=co,DC=local -> lo que esta haciendo es buscar en la red xxx.com.co.local que tendría que apuntar al AD):
https://docs.openkm.com/kcenter/view/ok ... bletologin

He repasado el XML y no le veo problemas. Seria interesante ver si en el fichero openkm.log te aparece algun tipo de error, como este de aquí https://docs.openkm.com/kcenter/view/ok ... mematching ( últimamente microsoft está forzando a que las conexiones contra el AD sean por fuerza con SSL -> igual depués de una actualización es lo que podría estar sucediendo )

Recuerda que para que los cambios tenga efecto tienes que reiniciar el servicio
[/quote]
 #51947  by jllort
 
Antes de probar con esto https://docs.openkm.com/kcenter/view/ok ... ptionerror ( eso va a hacer que el proceso de login sea un poco mas lento ) te aconsejo que desde el fichero de host le pongas la IP de este hos TAPI3Directory.xxx.com.co.local:389 [Root exception is java.net.UnknownHostException, porque parece que no puede conectar
 #51979  by JuankNet
 
Hola Jllort,

Gracias por tu ayuda pero nada, hice eso antes de tu respuesta y tampoco. Ya no se que revisar.

Tengo este error al iniciar el servicio:
Code: Select all
2020-12-28 10:58:11,632 [gestiondocumental.elpais.com.co-startStop-1] [] WARN  c.o.servlet.RepositoryStartupServlet - *** No OpenOffice manager nor server configured ***
2020-12-28 10:58:11,632 [gestiondocumental.elpais.com.co-startStop-1] [] INFO  c.o.extension.core.ExtensionManager - Initialize and load plugins...
2020-12-28 10:58:12,147 [gestiondocumental.elpais.com.co-startStop-1] [] INFO  c.o.servlet.RepositoryStartupServlet - *** Execute start script ***
2020-12-28 10:58:12,163 [gestiondocumental.elpais.com.co-startStop-1] [] WARN  com.openkm.util.ExecutionUtils - Unable to read script: C:\tomcat-8.5.34\start.bsh
2020-12-28 10:58:12,163 [gestiondocumental.elpais.com.co-startStop-1] [] WARN  com.openkm.util.ExecutionUtils - Unable to read jar: C:\tomcat-8.5.34\start.jar
2020-12-28 10:58:12,163 [gestiondocumental.elpais.com.co-startStop-1] [] INFO  c.o.servlet.RepositoryStartupServlet - *** Execute start SQL ***
2020-12-28 10:58:12,163 [gestiondocumental.elpais.com.co-startStop-1] [] WARN  c.o.servlet.RepositoryStartupServlet - Unable to read sql: C:\tomcat-8.5.34\start.sql
2020-12-28 10:58:12,179 [gestiondocumental.elpais.com.co-startStop-1] [] WARN  o.a.c.o.s.i.a.CmisAtomPubServlet - CMIS version is not defined! Setting it to CMIS 1.0.
2020-12-28 11:00:00,157 [Thread-17] [] INFO  com.openkm.core.UserMailImporter - *** User mail importer activated ***
2020-12-28 11:00:00,157 [Thread-17] [] INFO  c.o.module.common.CommonAuthModule - PrincipalAdapter: com.openkm.principal.LdapPrincipalAdapter
2020-12-28 11:00:00,657 [Thread-17] [] ERROR c.o.principal.LdapPrincipalAdapter - NamingException: null (Cache: com.openkm.cache.ldapPrincipalAdapter.general - Key: getUsers - Base: [DC=elpais,DC=com,DC=co,DC=local] - Filter: (&(objectclass=user)(|(memberOf=CN=ROLE_ADMIN,OU=Groups,DC=elpais,DC=com,DC=co,DC=local)(memberOf=CN=ROLE_USER,OU=Groups,DC=elpais,DC=com,DC=co,DC=local))) - Attribute: sAMAccountName)
Y este es el error cuando me intento loguear con el usuario de dominio:
Code: Select all
2020-12-28 18:38:17,777 [http-nio-0.0.0.0-80-exec-7] [] INFO  com.openkm.spring.LoggerListener - Authentication ERROR: jcbustamante
2020-12-28 18:45:12,884 [http-nio-0.0.0.0-80-exec-3] [] ERROR c.o.principal.LdapPrincipalAdapter - NamingException: null (Cache: com.openkm.cache.ldapPrincipalAdapter.general - Key: getUsers - Base: [DC=elpais,DC=com,DC=co,DC=local] - Filter: (&(objectclass=user)(|(memberOf=CN=ROLE_ADMIN,OU=Groups,DC=elpais,DC=com,DC=co,DC=local)(memberOf=CN=ROLE_USER,OU=Groups,DC=elpais,DC=com,DC=co,DC=local))) - Attribute: sAMAccountName)
Gracias por tu ayuda.
 #51993  by jllort
 
La sensación es que el parámetro de configuración principal.ldap.user.search.filter no está correcto. Ponle un valor más general y más adelante realiza un filtrado mas restrictivo principal.ldap.user.search.filter=(objectclass=person) ( ojo que con este filtro salen todos los usuarios, no se cuantos tienes ? )
 #52016  by JuankNet
 
jllort wrote: Thu Dec 31, 2020 8:59 am La sensación es que el parámetro de configuración principal.ldap.user.search.filter no está correcto. Ponle un valor más general y más adelante realiza un filtrado mas restrictivo principal.ldap.user.search.filter=(objectclass=person) ( ojo que con este filtro salen todos los usuarios, no se cuantos tienes ? )
Buen día Jllort, gracias por tus respuestas pero estoy a punto de tirar la toalla. Hice la configuración basado en el ejemplo: Active Directory example with login based on filtering users by roles, de una manera idéntica en el Directorio Activo, te dejo mi confg completa a ver en q me puedes ayudar, cuando hago los cambios en la configuración se muestran los usuarios que agregue a los grupos ROLE_ADMIN Y ROLE_USER, hasta ahi todo bien, pero cuando modifico el archivo open.xml no me permite loguear y muestra este error en el log:

PARTE DEL ERROR en openkm.log:
Code: Select all
2021-01-07 10:42:56,837 [http-nio-0.0.0.0-80-exec-2] [] ERROR c.o.principal.LdapPrincipalAdapter - NamingException: null (Cache: com.openkm.cache.ldapPrincipalAdapter.general - Key: getRolesByUser:appuser - Base: [DC=yyy,DC=com,DC=co,DC=local] - Filter: (&(objectClass=person)(sAMAccountName=appuser)) - Attribute: memberOf)
2021-01-07 10:42:56,852 [http-nio-0.0.0.0-80-exec-2] [] ERROR c.o.principal.LdapPrincipalAdapter - NamingException: null (Cache: com.openkm.cache.ldapPrincipalAdapter.general - Key: getMail:appuser - Base: [DC=yyy,DC=com,DC=co,DC=local] - Filter: (&(objectClass=person)(sAMAccountName=appuser)) - Attribute: userPrincipalName)
2021-01-07 10:46:59,424 [Update Info] [] INFO  com.openkm.core.UpdateInfo - *** UpdateInfo activated ***
2021-01-07 10:46:59,831 [Update Info] [] INFO  com.openkm.util.Update - checkVersion: 
2021-01-07 11:00:00,109 [Thread-46] [] INFO  com.openkm.core.UserMailImporter - *** User mail importer activated ***
2021-01-07 11:00:00,187 [Thread-46] [] ERROR c.o.principal.LdapPrincipalAdapter - NamingException: null (Cache: com.openkm.cache.ldapPrincipalAdapter.general - Key: getUsers - Base: [DC=yyy,DC=com,DC=co,DC=local] - Filter: (&(objectclass=user)(|(memberOf=CN=ROLE_ADMIN,OU=OpenKM,DC=yyy,DC=com,DC=co,DC=local)(memberOf=CN=ROLE_USER,OU=OpenKM,DC=yyy,DC=com,DC=co,DC=local))) - Attribute: sAMAccountName)
1. La configuración es igual a la del ejemplo, solo cambia mi dominio:
https://docs.openkm.com/kcenter/view/ok ... roles.html

2.Archivo Open.XML
Code: Select all
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns:beans="http://www.springframework.org/schema/beans"
             xmlns:security="http://www.springframework.org/schema/security"
             xmlns:task="http://www.springframework.org/schema/task"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://www.springframework.org/schema/beans
                                 http://www.springframework.org/schema/beans/spring-beans.xsd
                                 http://www.springframework.org/schema/security
                                 http://www.springframework.org/schema/security/spring-security.xsd
                                 http://www.springframework.org/schema/task
                                 http://www.springframework.org/schema/task/spring-task.xsd">
 
<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://192.168.x.xx"/>
  <beans:property name="userDn" value="CN=okm,CN=Users,DC=yyy,DC=com,DC=co,DC=local"/>
  <beans:property name="password" value="xxxxx"/>
  <beans:property name="baseEnvironmentProperties">
     <beans:map>
        <beans:entry>
          <beans:key>
            <beans:value>java.naming.referral</beans:value>
          </beans:key>
          <beans:value>follow</beans:value>
        </beans:entry>
      </beans:map>
   </beans:property>
</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="DC=yyy,DC=com,DC=co,DC=local"/>
      <beans:property name="groupSearchFilter" value="member={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="DC=yyy,DC=com,DC=co,DC=local" />
  <beans:constructor-arg index="1" value="(&amp;(sAMAccountName={0})(|(memberOf=CN=ROLE_ADMIN,OU=OpenKM,DC=yyy,DC=com,DC=co,DC=local)(memberOf=CN=ROLE_USER,OU=OpenKM,DC=yyy,DC=com,DC=co,DC=local)))" />
  <beans:constructor-arg index="2" ref="contextSource" />
  <beans:property name="searchSubtree" value="true" />
</beans:bean>
 
</beans:beans>
3. CONFIGURACION:
Code: Select all
Field / Property	Type	Description
principal.adapter	String	com.openkm.principal.LdapPrincipalAdapter

system.login.lowercase	String	true

principal.ldap.server	String	ldap://192.168.xxx.xxx:389

principal.ldap.security.principal	String	CN=okm,OU=OPENKM,DC=company,DC=com

principal.ldap.security.credentials	String	password

principal.ldap.referral	String	follow

principal.ldap.users.from.roles   	Boolean	false

principal.ldap.user.attribute	String	sAMAccountName

principal.ldap.user.search.base  List	DC=yyy,DC=com,DC=co,dC=local

principal.ldap.user.search.filter   String	(&(objectclass=user)(|(memberOf=CN=ROLE_ADMIN,OU=OpenKM,DC=yyy,DC=com,DC=co,dC=local)(memberOf=CN=ROLE_USER,OU=OpenKM,DC=yyy,DC=com,DC=co,dC=local)))

principal.ldap.username.attribute  String	cn

principal.ldap.username.search.base   String	DC=yyy,DC=com,DC=co,dC=local

principal.ldap.username.search.filter   String	(&(objectClass=person)(sAMAccountName={0}))

principal.ldap.mail.attribute	String	userPrincipalName

principal.ldap.mail.search.base	String	DC=yyy,DC=com,DC=co,dC=local

principal.ldap.mail.search.filter	String	(&(objectClass=person)(sAMAccountName={0}))

principal.ldap.role.attribute   String   cn

principal.ldap.role.search.base    List     DC=yyy,DC=com,DC=co,dC=local

principal.ldap.role.search.filter    String	(objectclass=group)

principal.ldap.roles.by.user.attribute   String    memberOf

principal.ldap.roles.by.user.search.base    String	DC=yyy,DC=com,DC=co,dC=local

principal.ldap.roles.by.user.search.filter   String    (&(objectClass=person)(sAMAccountName={0}))

principal.ldap.users.by.role.attribute   String  member

principal.ldap.users.by.role.search.base   String	   OU=OpenKM,DC=yyy,DC=com,DC=co,dC=local

principal.ldap.users.by.role.search.filter   String	(&(objectClass=group)(cn={0}))
El log del catalina no muestra algo relevante, por eso no te dejo copia del mismo.

Te agradezco cualquier indicio para poder integrarlo a mi directorio activo. Gracias Mil.

Saludos,
 #52024  by jllort
 
La integración con el AD no es fácil ( la primera vez tarde casi 2 semanas, ahora en general en 1 hora después de más de 60 integraciones y haber visto un monton casos particulares es más sencillo ) El problema de fondo es que no existen 2 AD que sean exactamente iguales, se parecen pero a veces existen pequeñas diferencias. Otras veces existen problemas que no son propiamente del AD sino del servidor de dominios ... vamos que esto es un puzzle simpático.

El 75% de la integración es conseguir que los valores de usuarios y roles aparezcan en la administración. Conseguido esto la parte del OpenKM.xml es un poco más frustrante porque o te logeas o no te logeas ( no tiene termino medio ), pero muchas veces el problema no es la configuración del OpenKM.xml sino otros problemas como la resolución de dominios que necesita la integración y en muchos casos el servidor de dominios no está exactamente configurado como le gustaría al AD.

En la mayoría de casos meter la resolución en el fichero de host arregla el 80% de los problemas:
https://docs.openkm.com/kcenter/view/ok ... bletologin

También puedes forzar a que todos los usuarios sean miembros de ROLE_USER ( eso te descartaría otro problema ) -> aqui te logearías pero te daría un error 403 y no es tu caso
https://docs.openkm.com/kcenter/view/ok ... fROLE_USER

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.