Estigmatizados

La informática profesional no es un juego de políticos

The Big Picture: Liferay + Alfresco + Jasig CAS + OpenLDAP

The Big Picture

The Big Picture

Nos vamos acercando al entorno deseado. Tenemos Liferay y Alfresco autenticando con OpenLDAP. Es hora de añadir el Single Sign On (SSO), utilizando una solución desarrollada por la universidad de Yale: Central Authentication System (CAS).

En primer lugar vamos a configurar el servidor CAS:
  1. Deberemos configurar un “LDAP Authentication Handler”
  2. Deberemos configurar el servidor para SSL.
  3. Deberemos configurar los clientes para que confíen en el certificado del servidor generado en el punto (2) -esto es necesario porque vamos a trabajar con certificados de prueba (self-signed)

Configuración de CAS y LDAP

CAS User Manual

Paso 1.1

El primer paso que indica el manual es añadir la siguiente dependencia a pom.xml

<dependency>
     <groupId>${project.groupId}</groupId>
     <artifactId>cas-server-support-ldap</artifactId>
     <version>${project.version}</version>
</dependency>

Sé que tiene que ver con Maven, pero dado que Maven lo asocio a la construcción, no sé cuál es la razón de añadir esta declaración. Si algún alma caritativa puede aportar algo de luz mediante un comentario Dios se lo pagará con muchos hijos -o mujeres u hombres-

Mi pompom, mi pom.xml lo tengo en: C:\desarrollo\java\install\tomcat-5.5\webapps\cas-server-webapp-3.3.3\META-INF\maven\org.jasig.cas\cas-server-webapp\pom.xml

Paso 1.2

Añadir los beans al archivo: C:\desarrollo\java\install\tomcat-5.5\webapps\cas-server-webapp-3.3.3\WEB-INF\deployerConfigContext.xml

NOTA: Mi servidor es gammu y openLDAP está corriendo en el puerto 389.

1.2.1 Configuración del bean id=”contextSource”

En el bean con id contextSource debemos indicar:
Las URL del servidor LDAP. En mi caso ldap://gammu:389
El DN del usuario con el que conectaremos con LDAP. En mi caso cn=admin,dc=uniovi,dc=es
La contraseña de este usuario. En mi caso secret -contraseña por defecto en OpenLDAP y Apache DS-

 1.2.2 Configuración del bean id=”authenticationManager”

En la propiedad authenticationHandlers define una lista de manejadores. Debemos eliminar o comentar el SimpleTestUsernamePasswordAuthenticationHandler y sustituirlo por el FastBindLdapAuthenticationHandler -en mi caso-.

1.2.3 Propiedades del FastBindLdapAuthenticationHandler

Simplemente tenemos que configurar la propiedad filter. Esta propiedad define cómo buscar usuarios en el árbol LDAP. En mi caso utilizo el UID, en otros casos puede ser necesario comprobar por el CN. En mi caso: uid=%u,ou=people,dc=uniovi,dc=es

————————————- deployerConfigContext.xml —————————————————-

<beans xmlns=”http://www.springframework.org/schema/beans
       xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance
       xmlns:p=”http://www.springframework.org/schema/p
       xsi:schemaLocation=”http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd“>
 
 <!– FER_BEGIN –>
 <bean id=”contextSource”>
  <property name=”pooled” value=”true”/>
  <property name=”urls”>
   <list>
    <value>ldap://gammu:389</value>
   </list>
  </property>
  <property name=”userDn” value=”cn=admin,dc=uniovi,dc=es”/>
  <property name=”password” value=”secret”/>
  <property name=”baseEnvironmentProperties”>
   <map>
    <entry>
     <key>
      <value>java.naming.security.authentication</value>
     </key>
     <value>simple</value>
    </entry>
   </map>
  </property>
 </bean>  
 <!– FER_END –>

<bean id=”authenticationManager”
  class=”org.jasig.cas.authentication.AuthenticationManagerImpl”>

<property name=”authenticationHandlers”>
   <list>
      <bean class=”org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler”  p:httpClient-ref=”httpClient” />
    <!– FER_BEGIN
    <bean
     class=”org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler” />
    FER_END –>
  
    <bean class=”org.jasig.cas.adaptors.ldap.FastBindLdapAuthenticationHandler”>
       <property name=”filter” value=”uid=%u,ou=people,dc=uniovi,dc=es” />
       <property name=”contextSource” ref=”contextSource” />
    </bean>    
   </list>
  </property>
</bean>

</beans>

Paso 2.1

Me adelanto un poco, pero prefiero comentar aquí un error que veréis cuando configuréis Alfresco para CAS. Si no hemos definido un certificado de servidor para nuestro Tomcat_CAS Alfresco nos mostrará un mensaje tal como:

edu.yale.its.tp.cas.client.CASAuthenticationException: Unable to validate ProxyTicketValidator [[edu.yale.its.tp.cas.client.ProxyTicketValidator proxyList=[null] [edu.yale.its.tp.cas.client.ServiceTicketValidator casValidateUrl=[https://localhost:8444/cas-server-webapp-3.3.3/serviceValidate] ticket=[ST-10-46fBuOkjqiPZUoCrUVc6-cas] service=[http%3A%2F%2Flocalhost%3A9090%2Falfresco%2Ffaces%2Fjsp%2Fdashboards%2Fcontainer.jsp] renew=false]]]

Para evitarlo tenemos que configurar Tomcat para SSL –ver el post de configuración de Tomcat con SSL– y añadir el certificado a la lista de certificados de confianza de la JRE.

Si tanto Alfresco como Liferay los tenéis en un mismo servidor, utilizad la misma JRE para ambos y no tendréis problemas de confianza. En el caso de tenerlos separados tenéis que importar el certificado a cada JRE -dado que me refiero siempre a certificados de prueba, no de VeriSign-.

Añadir una trusted certificate entry se puede hacer con la herramienta keytool o usando un pequeño programa Java muy sencillo.InstallCert

agosto 13, 2009 - Posted by | Portales | , , , , ,

5 comentarios »

  1. Hola, tengo una implementacion relativamente sencilla, pero no logro conectarme aun a un servidor Ldap.

    El error que tengo es el siguiente
    2009-09-11 13:58:18,640 INFO [org.jasig.cas.authentication.AuthenticationManagerImpl] –
    2009-09-11 13:58:27,343 INFO [org.jasig.cas.authentication.AuthenticationManagerImpl] –
    2009-09-11 13:58:37,984 INFO [org.jasig.cas.authentication.AuthenticationManagerImpl] –

    Los archivos de configuracion contienen lo siguiente:

    ldap://intente2k:389/

    <property name="password" value="”/>

    java.naming.security.authentication

    simple

    ….

    ….

    Si me pueden ayudar, les agradezco..

    Comentario por Jorge | septiembre 11, 2009 | Responder

    • Hola Jorge

      En la traza que pones no veo el error, tan sólo veo 3 mensajes de INFO.

      1. En primer lugar lo que yo haría sería comprobar la conectividad entre la máquina de Alfresco y tu LDAP.
      Por ejemplo haciendo un telnet a la máquina del LDAP. Si el telnet te avisa de problemas de conexión ahí puedes tener tu problema.

      telnet intente2k 389

      2. En segundo lugar cambiaría el nivel de log de Alfresco para poder ver algo más.
      Puedes definir un properties para log4j y jugar con los niveles de los logger. Ese archivo lo pones en el directorio extension. En mi caso:

      C:\desarrollo\java\install\alfresco-3.2\tomcat\shared\classes\alfresco\extension\dev-log4j.properties

      ####### Custom #########
      log4j.logger.org.alfresco.repo.security=debug
      log4j.logger.org.alfresco.repo.security.authentication.ldap=debug
      log4j.logger.org.alfresco.repo.security.sync.ldap=debug
      log4j.logger.com.keembay.alfresco.web.app.servlet=debug

      Échale un vistazo al alfresco.log y a los log del servidor.

      3. Un problema que me he encontrado es que no funciona bien el mecanismo de extensión para los .properties. En mi caso tuve que configurar LDAP en el archivo de propiedades global.
      C:\desarrollo\java\install\alfresco-3.2\tomcat\shared\classes\alfresco-global.properties

      Espero que te sirva de ayuda. Ya nos contarás.

      Un saludo

      Comentario por Fer | septiembre 12, 2009 | Responder

      • Muchas gracias, mi error se resume en la forma como se
        El ejemplo para conexion que aparece en la pagina Web funciona para la version 3.3.1

        Para la version 3.3.3
        Se debe crear la instancia del bean de forma diferente.. algo asi:

        ldap://intente2k:389

        <property name="password" value="”/>

        java.naming.security.authentication

        simple

        realiza la conexion con MS-Ldap, tambien encontre problemas para identificar que poner en los searchBase o filter en su defecto.. asi lo tengo funcionado.

        Muchas gracias por su aporte.

        Comentario por Jorge | septiembre 12, 2009

  2. Hola, estoy tratando de Configurar Liferay-Tomcat y Pentaho con el Jasig 3.3.3. Yo le cree el certificado mediante el keytool y se lo agregué a la lista de certificados de Java (del servidor) y a la propia del tomcat. Pero después de loggearme de dice que no encuentra un certificado válido. Como dato curioso en nungún fichero .log me sale dicho error sólo en la consola del tomcat…. Alguien sabe cual puede ser el error???

    Comentario por Julio Ernesto | julio 28, 2010 | Responder

  3. hola estoy tratando de hacer la autenticacion por medio de cas, ya hice todos lo pasos ke dices pero al momento de hacer el login me manda un error html 404 diciendo que el recurso no esta disponible y en el log de tomcat me aparece “error autologinfilter 246 current url / generates exception null” no tengo idea de por que me lo esta mandando espero me puedan ayudar

    mi configuracion es:
    – liferay 6.0.6
    – cas 3.4.8
    – apache DS

    Comentario por Ricardo G | julio 5, 2011 | Responder


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: