• Integracion con CAS y OpenLDAP

  • 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.
 #53651  by Darkan15
 
Saludos, Estoy intentando integrar CAS server 6.5 y OpenLDAP con OpenKM 6.3.11. Me disculpo de ante mano por lo extenso del post y la cantidad de preguntas, es la primera vez que utilizo o intento configurar OpenKM.

Ya tengo configurado el servidor CAS y OpenLDAP con una configuración básica y he logrado integrar otras aplicaciones pero al no tener experiencia con Java Spring me he conseguido con errores al intentar integrar OpenKM con OpenLDAP o CAS por lo que acudo a esta comunidad esperando que me puedan ayudar a aclarar las dudas y me presten apoyo para lograr esta integración.

Estoy utilizando Manjaro Linux, navegador firefox y contenedores docker https://hub.docker.com/r/openkm/openkm-ce y logre compilar OpenKM desde el código fuente y sustituir el war y la carpeta OpenKM en la carpeta webapps del tomcat del contenedor con éxito (aunque es mi primera vez manipulando código fuente de una aplicación java spring y utilizando tomcat).

OpenLDAP

Edit: hay mas de una forma para la configuración de LDAP copio la información aquí:
jllort wrote: Mon Jul 04, 2022 7:20 am Tea consejo que te centres en estas dos URL y mires la diferencia de la estructura ldap propuesta al principio de cada una de las páginas y te quedes con una de ellas ( porque vas a tener que montarla o no te funcionará )
* https://docs.openkm.com/kcenter/view/ok ... login.html
* https://docs.openkm.com/kcenter/view/ok ... -name.html

Una vez tengas la estructura en el ldap, entonces empieza primero por la parte de los parámetros de configuración y al final de todo por el OpenKM.xml que es el que se encarga del login. Esta configuración como veras tiene 2 partes; una configuración que se encarga de listar usuarios y roles ( que es por la que te sugiero que empieces ) y otra que es la que se encarga del proceso de autentificación ( el OpenKM.xml que te aconsejo lo dejes para el final de todo )

CAS

La primera documentación que conseguí para Integración con CAS esta en https://www.openkm.com/wiki/index.php/C ... OpenKM_6.2 pero dice ser para la versión 6.2 de OpenKM, intente reemplazar los tres archivos que indica esta guía y logra compilar, pero al sustituir el war en el contenedor la aplicación no levanta.

Alguien me puede indicar que cambios debo realizar para lograr que funcione?

Dice que se debe modificar la linea 117 del archivo applicationContext.xml con el siguiente código:
Code: Select all
<security:http access-denied-page="/unauthorized.jsp" entry-point-ref="casEntryPoint" >
<security:custom-filter position="CAS_FILTER" ref="casFilter" />
el archivo que puedo encontrar en el código fuente ahora se llama appContext.xml y contiene el siguiente bloque de código donde esta la linea 117 en este caso coloque un comentario:
Code: Select all
  <!-- Additional filter chain for normal users, matching all other requests -->
  <!-- http://info.michael-simons.eu/2011/01/28/disable-jsessionid-path-parameter-in-java-web-applications/ -->
  <security:http access-decision-manager-ref="accessDecisionManager" access-denied-page="/unauthorized.jsp">

    <!-- GWT -->
    <security:intercept-url pattern="/frontend/**" access="IS_AUTHENTICATED_FULLY"/>

    <!-- JSPs -->
    <security:intercept-url pattern="/login.jsp" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
    <security:intercept-url pattern="/admin/**" access="ROLE_ADMIN"/>
    <security:intercept-url pattern="/mobile/**" access="IS_AUTHENTICATED_FULLY"/>

    <!-- Servlets -->
    <security:intercept-url pattern="/RepositoryStartup" access="IS_AUTHENTICATED_FULLY"/>
    <security:intercept-url pattern="/TextToSpeech" access="IS_AUTHENTICATED_FULLY"/>
    <security:intercept-url pattern="/HtmlPreview" access="IS_AUTHENTICATED_FULLY"/>
    <security:intercept-url pattern="/SyntaxHighlighter" access="IS_AUTHENTICATED_FULLY"/>
    <security:intercept-url pattern="/Test" access="IS_AUTHENTICATED_FULLY"/>

    <!-- Extensions -->
    <security:intercept-url pattern="/extension/ZohoFileUpload" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
    <security:intercept-url pattern="/extension/**" access="IS_AUTHENTICATED_FULLY"/>
    <!-- LINE 117/LINEA 117 -->
    <!-- Login page -->
    <security:form-login login-page="/login.jsp" authentication-failure-url="/login.jsp?error=1"/>

  </security:http>
Se puede agregar dichas lineas tal como están, deben tener algún cambio y donde colocarlas?

En el archivo OpenKM.xml el código siguiente:
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="casAuthenticationProvider" />
        <security:authentication-provider ref="ldapAuthProvider" />
    </security:authentication-manager>

    <beans:bean id="contextSource" class="org.springframework.security.ldap.DefaultSpringSecurityContextSource">
        <beans:constructor-arg value="ldap://URLSERVEURLDAP:389/ou=sde,dc=SITE,dc=fr"/>
        <beans:property name="userDn" value="cn=admin,dc=SITE,dc=fr"/>
        <beans:property name="password" value="PASSLDAP"/>
    </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:property>
            </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="ou=groups"/>
                <beans:property name="groupSearchFilter" value="memberUid={1}"/>
                <beans:property name="groupRoleAttribute" value="cn"/>
                <beans:property name="searchSubtree" value="true" />
                <beans:property name="convertToUpperCase" value="true" />
                <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=people" />
        <beans:constructor-arg index="1" value="cn={0}" />
        <beans:constructor-arg index="2" ref="contextSource" />
        <beans:property name="searchSubtree" value="true" />
    </beans:bean>
    <beans:bean id="serviceProperties" class="org.springframework.security.cas.ServiceProperties">
        <beans:property name="service" value="http://URLOPENKM:8080/OpenKM/j_spring_cas_security_check"/>
        <beans:property name="sendRenew" value="false"/>
    </beans:bean>

    <beans:bean id="casAuthenticationProvider" class="org.springframework.security.cas.authentication.CasAuthenticationProvider">
        <beans:property name="authenticationUserDetailsService">
            <beans:bean class="org.springframework.security.cas.userdetails.GrantedAuthorityFromAssertionAttributesUserDetailsService">
                <beans:constructor-arg>
                    <beans:array>
                        <beans:value>groupe</beans:value>
                    </beans:array>
                </beans:constructor-arg>
            </beans:bean>
        </beans:property>

        <beans:property name="serviceProperties" ref="serviceProperties" />
        <beans:property name="ticketValidator">
            <beans:bean class="org.jasig.cas.client.validation.Saml11TicketValidator">
                <beans:constructor-arg index="0" value="https://URLSERVEURCAS:8443/cas" />
            </beans:bean>
        </beans:property>
        <beans:property name="key" value="an_id_for_this_auth_provider_only"/>
    </beans:bean>

    <beans:bean id="casFilter" class="org.springframework.security.cas.web.CasAuthenticationFilter">
        <beans:property name="authenticationManager" ref="authenticationManager"/>
    </beans:bean>

    <beans:bean id="casEntryPoint" class="org.springframework.security.cas.web.CasAuthenticationEntryPoint">
        <beans:property name="loginUrl" value="https://URLSERVEURCAS:8443/cas/login"/>
        <beans:property name="serviceProperties" ref="serviceProperties"/>
    </beans:bean>
</beans:beans>

Debe hacerse algun cambio en este archivo?

Debo agregar soporte al servidor CAS para algun protocolo adicional como por ejemplo OpenID, OAuth, OpenID Connect, SAML1, SAML2, REST?

Hace falta alguna otra dependencia o codigo adicional que no este incluido en el post referenciado?


Es necesario crear un usuario "okmAdmin" dentro de LDAP que sea un espejo del usuario administrador por defecto?
Edit: En mi opinion recomendable tenerlo en la primera etapa de configuración que se encarga de listar usuarios y roles, para poder iniciar sesion antes de editar el OpenKM.xml
Last edited by Darkan15 on Tue Jul 05, 2022 12:36 am, edited 1 time in total.
 #53655  by jllort
 
Tienes bastante lio. Lo primero es que te olvides del CAS hasta que no tengas la integración con openldap ( no se para que necesitas el CAS, si es algo opcional o si realmente lo necesitas, pero te aconsejo empezar por el openldap y luego si te quieres torturar con el CAS adelante, porque si empiezas con dos problemas a la vez difícilmente esto va a funcionar.

Tea consejo que te centres en estas dos URL y mires la diferencia de la estructura ldap propuesta al principio de cada una de las páginas y te quedes con una de ellas ( porque vas a tener que montarla o no te funcionará )
* https://docs.openkm.com/kcenter/view/ok ... login.html
* https://docs.openkm.com/kcenter/view/ok ... -name.html

Una vez tengas la estructura en el ldap, entonces empieza primero por la parte de los parámetros de configuración y al final de todo por el OpenKM.xml que es el que se encarga del login. Esta configuración como veras tiene 2 partes; una configuración que se encarga de listar usuarios y roles ( que es por la que te sugiero que empieces ) y otra que es la que se encarga del proceso de autentificación ( el OpenKM.xml que te aconsejo lo dejes para el final de todo )

Cuando tengas esto funcionando, saltar al cas implica dejar la configuración del listado de usuario y roles intacta y únicamente aplicar cambios para la autentificación.
 #53670  by Darkan15
 
jllort wrote: * https://docs.openkm.com/kcenter/view/ok ... login.html
Gracias, siguiendo este enlace he logrado integrar OpenLDAP con OpenKM tanto la configuración que se encarga de listar usuarios y roles como la que se encarga del proceso de autentificación en el OpenKM.xml.

Ahora me queda la tarea de intentar la integración con CAS, he visto en otro post: viewtopic.php?p=53053 que es posible con OpenKM 6.3.11 pero no ha indicado que cambios hacer con la documentación desactualizada del link https://www.openkm.com/wiki/index.php/C ... OpenKM_6.2

Sigo atento si alguien me puede echar una mano, o de responder a este post en caso de encontrar la solución.
 #53695  by jllort
 
Esa configuración la compartio hace años un usuario que lo integro. Ahora mismo no te puedo decir mucho más porque no tenemos ninguna instalación en producción con CAS -> es un buen punto para empezar de todas formas piensa que es posible que debido a actualizaciones en la versión del CAS alguna cosa se haya cambiado ( pero igual no mucho )
 #53763  by jllort
 
Piensa que es un post antiguo y que si estas utilizando la última versión del CAS igual algo ha cambiado, te aconsejaría preguntarlo en el foro de la aplicación del CAS que probablemente desde ahí te pueden guiar de una forma más adecuada.

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.