OpenKM y Active Directory

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.
Post Reply
jorge.ibanez
Fresh Boarder
Fresh Boarder
Posts: 9
Joined: Fri Jul 07, 2017 10:08 am

OpenKM y Active Directory

Post 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
jllort
Moderator
Moderator
Posts: 11435
Joined: Fri Dec 21, 2007 11:23 am
Location: Sineu - ( Illes Balears ) - Spain
Contact:

Re: OpenKM y Active Directory

Post 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)))" />
jorge.ibanez
Fresh Boarder
Fresh Boarder
Posts: 9
Joined: Fri Jul 07, 2017 10:08 am

Re: OpenKM y Active Directory

Post 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í.
JuankNet
Fresh Boarder
Fresh Boarder
Posts: 4
Joined: Fri Dec 11, 2020 3:53 pm

Re: OpenKM y Active Directory

Post 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..
jllort
Moderator
Moderator
Posts: 11435
Joined: Fri Dec 21, 2007 11:23 am
Location: Sineu - ( Illes Balears ) - Spain
Contact:

Re: OpenKM y Active Directory

Post 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
JuankNet
Fresh Boarder
Fresh Boarder
Posts: 4
Joined: Fri Dec 11, 2020 3:53 pm

Re: OpenKM y Active Directory

Post 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]
jllort
Moderator
Moderator
Posts: 11435
Joined: Fri Dec 21, 2007 11:23 am
Location: Sineu - ( Illes Balears ) - Spain
Contact:

Re: OpenKM y Active Directory

Post 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
JuankNet
Fresh Boarder
Fresh Boarder
Posts: 4
Joined: Fri Dec 11, 2020 3:53 pm

Re: OpenKM y Active Directory

Post 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.
jllort
Moderator
Moderator
Posts: 11435
Joined: Fri Dec 21, 2007 11:23 am
Location: Sineu - ( Illes Balears ) - Spain
Contact:

Re: OpenKM y Active Directory

Post 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 ? )
JuankNet
Fresh Boarder
Fresh Boarder
Posts: 4
Joined: Fri Dec 11, 2020 3:53 pm

Re: OpenKM y Active Directory

Post 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,
jllort
Moderator
Moderator
Posts: 11435
Joined: Fri Dec 21, 2007 11:23 am
Location: Sineu - ( Illes Balears ) - Spain
Contact:

Re: OpenKM y Active Directory

Post 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
Post Reply