Alfresco Share 4 y Single Sign On con CAS

Os dejo aquí unas notas sobre como casificar Alfresco Share, para la version 4.x de Alfresco. Por defecto, Alfresco Share no es una aplicación que esta casificada y que necesita algunos cambios "out of the box" para que se autentique contra un servidor centralizado de autenticación CAS.

La arquitectura planteada en este artículo sería algo así:


En el repositorio, debemos definir una cadena de autenticación externa en el alfresco-global.properties

authentication.chain=external1:external,alfrescoNtlm1:alfrescoNtlm
# IMPORTANTE! Sin esta propiedad Alfresco Share no se autenticará correctamente
external.authentication.proxyUserName=

Estamos en la aproximación de que Alfresco Share y Alfresco Repository conforman dos capas (máquinas) separadas.  

En Alfresco Share, debemos añadir en primer lugar las algunas librerías en $TOMCAT_HOME/webapps/share/WEB-INF/lib

  • cas-client-core-3.1.12.jar
  • opensaml-1.0.1.jar
  • zk-cas-filter.jar

Además es necesario modificar el web.xml de share.war para configurar los filtros de CAS, así como compilar un filtro a medida (zk-cas-filter.jar). El código java se puede obtener de este wiki, que es de donde he partido para la integración de Alfresco Share y CAS:

http://ifaq.wikispaces.com/CAS+-+CASificando+Alfresco+Share

Los filtros en el web.xml son:

    <filter>
      <filter-name>Authentication Filter</filter-name>
      <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
      <init-param>
         <param-name>casServerLoginUrl</param-name>
         <param-value> https://services.zylk.net/cas</param-value>
      </init-param>
      <init-param>
         <param-name>serverName</param-name>
         <param-value> https://share.zylk.net</param-value>
      </init-param>
   </filter>
 
   <filter>
      <filter-name>Ticket Validation Filter</filter-name>
      <filter-class>org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>
      <init-param>
         <param-name>casServerUrlPrefix</param-name>
       <param-value> https://services.zylk.net</param-value>
      </init-param>
      <init-param>
         <param-name>serverName</param-name>
         <param-value> https://share.zylk.net</param-value>
      </init-param>
   </filter>
 
   <filter>
      <filter-name>Alfresco Share Filter</filter-name>
      <filter-class>net.zylk.alfresco.cas.filter.AlfrescoShareFilter</filter-class>
   </filter>

   <filter-mapping>
      <filter-name>Authentication Filter</filter-name>
      <url-pattern>/page/*</url-pattern>
   </filter-mapping>
   <filter-mapping>
      <filter-name>Authentication Filter</filter-name>
      <url-pattern>/p/*</url-pattern>
   </filter-mapping>
   <filter-mapping>
      <filter-name>Authentication Filter</filter-name>
      <url-pattern>/proxy/*</url-pattern>
   </filter-mapping>
 
   <filter-mapping>
      <filter-name>Ticket Validation Filter</filter-name>
      <url-pattern>/page/*</url-pattern>
   </filter-mapping>
   <filter-mapping>
      <filter-name>Ticket Validation Filter</filter-name>
      <url-pattern>/p/*</url-pattern>
   </filter-mapping>
   <filter-mapping>
      <filter-name>Ticket Validation Filter</filter-name>
      <url-pattern>/proxy/*</url-pattern>
   </filter-mapping>
 
   <filter-mapping>
      <filter-name>Alfresco Share Filter</filter-name>
      <url-pattern>/page/*</url-pattern>
   </filter-mapping>
   <filter-mapping>
      <filter-name>Alfresco Share Filter</filter-name>
      <url-pattern>/p/*</url-pattern>
   </filter-mapping>
   <filter-mapping>
      <filter-name>Alfresco Share Filter</filter-name>
      <url-pattern>/proxy/*</url-pattern>
   </filter-mapping>


Notad que las propiedades principales definidas en el web.xml atienden a la url del servicio de autenticación centralizado (CAS) por un lado, y por otro a la redirección que hará este junto con el ticket de autenticación, al servidor donde está desplegado Alfresco Share.


Por último, en el archivo de configuración principal de Alfresco Share share-config-custom.xml definimos la sección remote y el endpoint del repositorio, es decir la url del repositorio de Alfresco, poniendo a true el parámetro external auth.

   <config evaluator="string-compare" condition="Remote">
      <remote>
         <keystore>
             <path>alfresco/web-extension/alfresco-system.p12</path>
             <type>pkcs12</type>
             <password>alfresco-system</password>
         </keystore>
 
         <connector>
            <id>alfrescoCookie</id>
            <name>Alfresco Connector</name>
            <description>Connects to an Alfresco instance using cookie-based authentication</description>
            <class>org.springframework.extensions.webscripts.connector.AlfrescoConnector</class>
         </connector>
 
         <endpoint>
            <id>alfresco</id>
            <name>Alfresco - user access</name>
            <description>Access to Alfresco Repository WebScripts that require user authentication</description>
            <connector-id>alfrescoCookie</connector-id>
            <endpoint-url> http://alf.zylk.net:8080/alfresco/wcs</endpoint-url>
            <identity>user</identity>
            <external-auth>true</external-auth>
         </endpoint>
      </remote>
   </config>


En el ejemplo de arriba no se ha securizado nada más que la capa web de acceso a través del frontal Apache.

Enlaces útiles:

00

Más entradas de blog

Añadir comentarios