Open IT Experts for Enterprise

Zylk empresa de desarrollo de ecommerce

Alfresco Share 4 y Single Sign On con CAS

Cesar Capillas
Cesar Capillas

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:

Si te ha parecido interesante comparte este post en RRS

Facebook
LinkedIn
Telegram
Email

Leer más sobre temas relacionados

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *