Soporte SSO para aplicaciones Aikau

/ / Arquitectura, Blog, Document Management
flowable, el camino de Activiti se bifurca
Ionic Trusted Partner

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.

A. Definición del filtro

<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>

C. Spring Listener

<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.

Unidad de negocio, keensoft