viernes, diciembre 18, 2009

Single Sign On (SSO) en Alfresco con NTLM (Windows)

En el artículo anterior se vió la forma de configurar la autenticación NTLM (Autenticación NTLM en Alfresco) tanto vía WebClient (web) como vía CIFS (unidades compartidas de Windows). De hecho se ha visto una configuración denominada "passthru" en la que los usuarios se buscan directamente en la SAM de Windows, ya sea 2000/2003/... Server, o el mismo Windows XP que también contiene la suya.

Bien, pero, si el cliente es desde windows y nos hemos identificado con un usuario que ya existe en Alfresco, lo ideal es que no vuelva a preguntar por esa autenticación y envíe los datos de usuario/password (o cadena MD4) de nuevo, si no que el mismo Internet Explorer los envíe de forma automática y por tanto se esté autenticado. Esto es lo que se conoce como Single Sign On (SSO).

Alfresco permite este sistema de autenticación "automatizada" o de "autentícate una vez solamente" en determinadas configuraciones. Una de ellas es a través de NTLM siempre que el sistema utilice NTLMv1. En el caso que nos ocupa, con una instalación de Alfresco Enterprise 3.1 SP1 en una máquina Linux Ubuntu 9.10 y una base de usuarios en Windows XP, accediendo desde el propio Windows XP autenticados previamente con una cuenta que existe en Alfresco.

Los ficheros a configurar son los mismos que anteriormente, o sea, web.xml y ntlm-authentication-context.xml

Muy bien, ya están configurados, pero entonces, ¿por qué se me solicita siempre usuario y contraseña desde Internet Explorer si estoy autenticado con un usuario y contraseña que ya están en Alfresco)

La respuesta está en base a dos configuraciones que hay que revisar:

1. Uso de NTLMv1 desde Windows. Para ello hay que realizar los siguientes pasos en Windows:

a) Ir a "Panel de control->Herramientas administrativas->Política de seguridad local"
b) Seleccionar la carpeta "Políticas locales"
c) Ir a "Opciones de seguridad"
d) Seleccionar "Network Security : nivel de autenticación del controlador LAN"
e) Comprobar (o en su caso establecerla) que está en la opción de "Enviar LM & NTLM - usar seguridad de sesión NTLMv2 si se negocia"

2. Acceso desde Internet Explorer. El navegador seguirá visualizando la ventana de autenticación porque, evidentemente, no se fía de realizar un acceso de forma automática sin el consentimiento del usuario. Para ello en Internet Explorer hay que seguir los siguientes pasos:

a) Ir a "Herramientas->Opciones de Internet...->Seguridad"
b) Seleccionar "Sitios de confianza"
c) Pulsar en el botón "Sitios.."
d) Introducir (Agregar) la URL del sitio al que se accede (del servidor donde está Alfresco), p.e. http://172.26.0.6:8080/alfresco (desactivar "Requerir comprobación del servidor (https)..." si no es una URL segura)

Con esto ya obtenemos SSO desde Windows con Internet Explorer desde la versión 6.

Para comprobar que funciona solo hay que activar en log4j.xml la depuración de NTLM:

log4j.logger.org.alfresco.web.app.servlet.NTLMAuthenticationFilter=debug
log4j.logger.org.alfresco.repo.webdav.auth.NTLMAuthenticationFilter=debug

Cuando autentique correctamente dará un resultado como el que sigue:

11:50:37,178 DEBUG [app.servlet.NTLMAuthenticationFilter] New NTLM auth request from 172.26.0.13 (172.26.0.13:3072) SID:A28CADB932CA4EFB87283284B9C29990
11:50:37,238 DEBUG [app.servlet.NTLMAuthenticationFilter] Received type1 [Type1:0xa208b207,Domain:WRKGRP,Wks:XPPRO]
11:50:37,239 DEBUG [app.servlet.NTLMAuthenticationFilter] Client domain WRKGRP
11:50:37,429 DEBUG [app.servlet.NTLMAuthenticationFilter] Sending NTLM type2 to client - [Type2:0x80000203,Target:PT043A,Ch:6ce8db32e9dccc27]
11:50:37,459 DEBUG [app.servlet.NTLMAuthenticationFilter] Received type3 [Type3:,LM:947bde8ff03d7b972817a6dc0232eddeba5c294ad9a337a2,NTLM:4a532d7bbd01f1ef2300a8fc91b54fbcad5e11db6a94f284,Dom:XPPRO,User:fegor,Wks:XPPRO]
11:50:37,555 User:fegor DEBUG [app.servlet.NTLMAuthenticationFilter] Updated cached NTLM details
11:50:37,556 User:fegor DEBUG [app.servlet.NTLMAuthenticationFilter] User logged on via NTLM, [fegor,Wks:XPPRO,Dom:XPPRO,AuthSrv:PT043A,Fri Dec 18 11:50:37 GMT+01:00 2009]

"Rizando el rizo"...

Bueno, pero , ¿que pasa con Fire Fox?, este navegador por defecto no es capaz de autenticar vía NTLM...

Por defecto no, pero podemos "forzarlo", ¿como?, solo hay que seguir los siguientes pasos:

a) Poner en la URL de Fire Fox "about:config" y aceptar la entrada.
b) Buscar la cadena "network.automatic-ntlm-auth.trusted-uris" e introducir como valor la URL de Alfresco. P.e. http://172.26.0.6:8080/alfresco

Con esta configuración podremos tener acceso SSO en Fire Fox 3 desde un cliente Windows.

Esta configuración (al igual que la del artículo anterior) han sido probadas tanto en la versión 2.1 (SP7) como en la 3.1 (SP1) de Alfresco Enterprise.