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: