lunes, 29 de junio de 2009

Alfresco y NTLM

Uno de los requisitos más habituales cuando se instala una herramienta en el ámbito de una empresa es la integración de la seguridad corporativa con la de la nueva aplicación. En muchos escenarios el requisito consiste en establecer un mecanismo de Single Sing-On entre la seguridad de la red corporativa y la nueva aplicación, de forma que los usuarios sólo tengan que autenticarse cuando inician su sesión de sistema operativo y puedan acceder al resto de aplicaciones sin tener que volver a proporcionar su usuario y contraseña.

Alfresco es una aplicación que, por sus características de aplicación de ámbito corporativo, es idónea para una integración como la descrita anteriormente. Así mismo, Windows es el sistema operativo más extendido entre los ordenadores personales de las empresas. Por este motivo, las útlimas versiones de Alfresco vienen preparadas para poder hacer esta integración de forma fácil con un mínimo de configuración.

En este detallado artículo, se describen los pasos necesarios para habilitar la autenticación mediante NTLM en modo passthru. El apartado dedicado a la activación de los filtros de autenticación en el fichero web.xml es claro y no necesita más explicaciones. La configuración de la autenticación passthru con NTLM necesita algunas aclaraciones.

La definición del SSO con ntlm se hace en el fichero ntlm-authentication-context.xml situado en el directorio de extensiones de Alfresco. En este caso es un controlador de dominio el encargado de realizar la auteticación y proporcionar la lista de usuarios disponibles en Alfresco. Es necesario configurar el bean authenticationComponent con los valores adecuados para que reconozca al servidor de dominio. Por ejemplo:

<bean id="authenticationComponent"
class="org.alfresco.repo.security.authentication.ntlm.NTLMAuthenticationComponentImpl"
parent="authenticationComponentBase">
<property name="useLocalServer">
<value>false</value>
</property>
<property name="servers">
<value>drake.in2.es,IN2\drake</value>
</property>
<property name="personService">
<ref bean="personService" />
</property>
<property name="nodeService">
<ref bean="nodeService" />
</property>
<property name="transactionService">
<ref bean="transactionComponent" />
</property>
<property name="guestAccess">
<value>false</value>
</property>
</bean>

La propiedad servers es la usada para definir el controlador de dominio. Es importante destacar que hay que proporcionar el dominio del servidor para que el SSO tenga efecto. En caso contrario aparecerá este mensaje de error cuando se intente acceder al Alfresco mediante SSO:
net.sf.acegisecurity.AuthenticationServiceException: Failed to open passthru auth session
Si además del cliente web de Alfresco se quiere utilizar CIFS para acceder a los contenidos, también hay que aplicar una configuración concreta. De los diferentes mecanismos de autenticación disponibles (alfresco, passthru o enterprise), el más adecuado es passthru usando el mismo servidor de dominio que el usado en el caso anterior. En este caso no hace falta especificar el dominio de los usuarios. Por ejemplo:

<authenticator type="passthru">
<Server>drake.in2.es</Server>
</authenticator>


Un detalle que hay que tener en cuenta con esta configuración es que sólo funciona si el sistema operativo del cliente envía las credenciales de autenticación usando NTLMv1. Si el sistema sólo usa NTLMv2, no será posible hacer el SSO ya que las caracterísitcas de este protocolo lo impiden.

En Windows se puede modificar este comportamiento siguiendo estos pasos:
  • Desde el panel de control (vista clásica), abrir Herramientas Administrativas -> Política de seguridad Local.
  • En la ventana de Política de seguridad local, seleccionar la carpeta Políticas Locales y luego Opciones de Seguridad.
  • En la lista de opciones de seguridad, seleccionar 'Network Security : nivel de autenticación del controlador LAN'.
  • Cambiar el valor por defecto por 'Enviar LM & NTLM - usar seguridad de sesión NTLMv2 si se negocia'.
Con estas configuraciones de Alfresco y Windows se consigue un acceso transparente a Alfresco solo con haber iniciado una sesión de red corporativa.

No hay comentarios: