
Alfresco Share, la aplicación web colaborativa de Alfresco, soporta Kerberos SSO desde hace tiempo. Esta característica permite la identificación del usurio en la plataforma de gestión documental de manera transparente, lo que facilita en gran medida las labores de integración de entornos en las organizaciones.
En ocasiones, es recomedable realizar aplicaciones standalone con tecnología Aikau, que permiten aislar parte de la funcionalidad de Share en un bloque reutilizable para ser integrado de manera genérica en muchas aplicaciones.
A continuación describimos las operaciones necesarias para incluir la autenticación Kerberos SSO en este tipo de aplicaciones Aikau.
Comenzaremos por la aplicación web por defecto aikau-sample, a la que añadiremos los elementos necesarios para dar soporte a la autenticación SSO.
Crear un nuevo cliente de Aikau
El cliente puede ser creado desde la línea de comandos.
mvn archetype:generate -DarchetypeCatalog=https://artifacts.alfresco.com/nexus/content/groups/public/archetype-catalog.xml \ -DarchetypeGroupId=org.alfresco -DarchetypeArtifactId=aikau-sample-archetype -DarchetypeVersion=RELEASE
Después añadimos una etiqueta en la página principal para identificar al usuario y facilitar las pruebas.
{ name: "alfresco/html/Label", config: { label: "Current user: " + user.fullName, additionalCssClasses: "bold {additionalCssClasses}" } }
Añadir las dependencias de Maven
El filtro SSO requiere algunas clases que son parte del artefacto share, por lo que modificamos el fichero pom.xml añadiendo esa dependencia
<dependency> <groupId>org.alfresco</groupId> <artifactId>share</artifactId> <version>5.1.g</version> <classifier>classes</classifier> </dependency>
Declarar el filtro en el descriptor web de la aplicación
Una vez que las clases SSO están disponibles, adaptamos el fichero web.xml para que filtre las peticiones.
<filter> <description>Share SSO authentication support filter.</description> <filter-name>SSOAuthenticationFilter</filter-name> <filter-class>org.alfresco.web.site.servlet.SSOAuthenticationFilter</filter-class> <init-param> <param-name>endpoint</param-name> <param-value>alfresco</param-value> </init-param> </filter>
B. Patrones de filtrado para URLs
<filter-mapping> <filter-name>SSOAuthenticationFilter</filter-name> <url-pattern>/page/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>SSOAuthenticationFilter</filter-name> <url-pattern>/p/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>SSOAuthenticationFilter</filter-name> <url-pattern>/proxy/*</url-pattern> </filter-mapping>
<context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/config/web-application-config.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
Incluir las propiedades de Kerberos en la configuración de Surf
En Alfresco Share, la configuración Surf puede ser incluida en share-config-custom.xml. La configuración relativa a Kebereos es copiada en el archivo surf.xml de la aplicación web Aikau.
<!-- KERBEROS SETTINGS --> <config evaluator="string-compare" condition="Kerberos" replace="true"> <Kerberos> <kerberos> <password>password</password> <realm>KEENSOFT.LOCAL</realm> <endpoint-spn>http/dms.keensoft.local@KEENSOFT.LOCAL</endpoint-spn> <config-entry>ShareHTTP</config-entry> </kerberos> </Kerberos> </config> <config evaluator="string-compare" condition="Remote"> <remote> <endpoint> <id>alfresco-noauth</id> <name>Alfresco - unauthenticated access</name> <description>Access to Alfresco Repository WebScripts that do not require authentication</description> <connector-id>alfresco</connector-id> <endpoint-url>http://localhost:8080/alfresco/s</endpoint-url> <identity>none</identity> </endpoint> <endpoint> <id>alfresco</id> <name>Alfresco - user access</name> <description>Access to Alfresco Repository WebScripts that require user authentication</description> <connector-id>alfresco</connector-id> <endpoint-url>http://localhost:8080/alfresco/s</endpoint-url> <identity>user</identity> </endpoint> </remote> </config> <config evaluator="string-compare" condition="Remote"> <remote> <connector> <id>alfrescoCookie</id> <name>Alfresco Connector</name> <description>Connects to an Alfresco instance using cookie-based authentication</description> <class>org.alfresco.web.site.servlet.SlingshotAlfrescoConnector</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://localhost:8080/alfresco/wcs</endpoint-url> <identity>user</identity> <external-auth>true</external-auth> </endpoint> </remote> </config>
Aviso: Comprueba los parámetros password
, realm
, endpoint-spn
and config-entry
para incluir tus propios datos.
Arreglos menores
Todos los recursos necesarios para SSO han sido copiados a la aplicación web Aikau, sin embargo aún queda un ajuste más por realizar. La clase AikauLoginController.java es generada automática por el arquetipo Maven de Aikau, sin embargo su configuración no es compatible con el filtro SSO de Share. Es necesario, por tanto, cambiar la clase base.
public class AikauLoginController extends org.alfresco.web.site.servlet.SlingshotLoginController {
A partir de este momento, la aplicación web Aikau acepta peticiones de autenticación Kerberos SSO.
Notas finales
- El código fuente de este artículo está disponible en https://github.com/angelborroy/aikau-kerberos-sso
- Se puede realizar una configuración más granular de las dependencias Maven, en vez de incluir el artefacto Share completo, para eliminar algunas bibliotecas JAR del empaquetado WAR
- Todos los recursos SSO de Alfresco han sido copiados sin modificación, solo un cambio menor ha tenido que ser realizado en el código autogenerado por el arquetipo de Aikau
La utilización de las tecnologías nativas de Alfresco permite proveer funcionalidades adicionales para la integración de aplicaciones de una manera sencilla, sin derivar en forzados protocolos de intercambio de credenciales mediante mecanismos que no siguen estándar alguno.