Para comenzar el año, os dejo aquí el primero de una serie de 3 artículos sobre la configuración de Single Sign On con Alfresco Enterprise 3.1. Las versiones 3.2 de Alfresco requieren una configuración que difiere de la que se cita a continuación. Estos artículos los he podido escribir gracias a la ayuda de Isaías Aranda, Raúl Macián y Fernando Gonzalez, compañeros y expertos en Alfresco de Intecna.
En este artículo veremos como “Activar SSO (Single Sign On) con Alfresco Explorer y Webdav con Active Directory (NTLM)“, en los siguientes artículos de esta serie veremos cómo “Activar el SSO en Alfresco Share con Active Directory (NTLM)” y cómo “Activar el SSO en Alfresco CIFS con Active Directory (NTLM)“.
¿Qué es Single Sign On (SSO)? Según la Wikipedia, que lo explica bastante bien, es un procedimiento de autenticación que habilita al usuario para acceder a varios sistemas con una sola instancia de identificación. Hablando en plata, que introduces tus credenciales una vez y ya accedes a todas las demás aplicaciones configuradas para funcionar como SSO. Más info aquí.
No confundas SSO con autenticar diferentes aplicaciones con el mismo usuario y contraseña, eso no es SSO, eso será autenticación centralizada.
Este procedimiento explica cómo configurar Alfresco Enterprise 3.1SP2 para que detecte las credenciales del usuario que accede a su estación de trabajo Windows XP logueando en un dominio controlado por Active Directory de esa forma, cuando el usuario acceda a Alfresco con Internet Explorer, autenticará dentro del Alfresco Explorer y Webdav automáticamente sin pedir usuario y contraseña, es decir, detectando el usuario que ya se envía en la sesión de Windows.
También se puede hacer esto con Firefox escribiendo “about:config” sin comillas en la URL, buscamos la cadena “network.automatic-ntlm-auth.trusted-uris” y añadimos (doble-click) la URL de Alfresco, en el caso de este artículo sería http://alfresco.test.tld:8080/alfresco
Datos usados para estos artículos:
- IP del controlador de dominio: 10.215.253.165 (w2003.test.tld)
- Dominio: TEST.TLD
- IP servidor Alfresco: 10.215.253.168 (alfresco.test.tld)
Ficheros que intervienen:
- web.xml -> dentro de WEB-INF de alfresco.war desplegado, directorio alfresco en webapps
- ntlm-authentication-context.xml -> en <extension>
En el web.xml modificar según se indica en: http://wiki.alfresco.com/wiki/3.0_Configuring_NTLM#Alfresco_Explorer_and_WebDav_SSO_using_NTLM simplemente es descomentar unas cuantas líneas que prefiero obviar aquí, pero no olvides hacerlo para que todo funcione.
En ntlm-authentication-context.xml quitar la extension .sample del nombre de fichero y modificar o añadir el siguiente bean:
<bean id=”authenticationComponent” class=”org.alfresco.repo.security.authentication.ntlm.NTLMAuthenticationComponentImpl” parent=”authenticationComponentBase”>
<property name=”useLocalServer”>
<value>false</value>
</property>
<!– Damain Servers –>
<property name=”servers”>
<value>TEST.TLD\10.215.253.165, 10.215.253.165</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>
Importante, hay que controlar los logs mientras estamos configurando estas funcionalidades, para ello debemos descomentar las siguientes líneas en el archivo log4j.properties que hay en el directorio classes del alfresco.war desplegado (webapps/alfresco/WEB-INF/classes):
# NTLM servlet filters
log4j.logger.org.alfresco.web.app.servlet.NTLMAuthenticationFilter=debug
log4j.logger.org.alfresco.repo.webdav.auth.NTLMAuthenticationFilter=debug
Reiniciamos Alfresco y ya podemos probar. Al acceder vía web (Alfresco Explorer) tras iniciar sesión con Windows XP en el dominio, deberemos ver unas trazas como las siguientes (Dominio TEST.TLD, Usuario: toni, Nombre de la máquina cliente: XPAIR, servidor Alfresco MACBOOK-DE-TONI):
20:41:26,223 DEBUG [app.servlet.NTLMAuthenticationFilter] New NTLM auth request from 10.215.253.168 (10.215.253.168:57688) SID:1B5CD1A3F83CE31F0EA27770359574FD
20:41:26,226 DEBUG [app.servlet.NTLMAuthenticationFilter] Received type1 [Type1:0xa2088207,Domain:<NotSet>,Wks:<NotSet>]
20:41:26,227 DEBUG [app.servlet.NTLMAuthenticationFilter] Client domain null
20:41:26,330 DEBUG [app.servlet.NTLMAuthenticationFilter] Sending NTLM type2 to client – [Type2:0x80000203,Target:MACBOOK-DE-TONI,Ch:9e407e94299c1e11]
20:41:26,335 DEBUG [app.servlet.NTLMAuthenticationFilter] Received type3 [Type3:,LM:3ca6bb198992e77cc713341304743f156de9a77061678617,NTLM:239d3b79b323af49d32a77be92842057d65b32af3fb4236b,Dom:TEST,User:toni,Wks:XPAIR]
20:41:26,381 User:toni DEBUG [app.servlet.NTLMAuthenticationFilter] Updated cached NTLM details
20:41:26,381 User:toni DEBUG [app.servlet.NTLMAuthenticationFilter] User logged on via NTLM, [toni,Wks:XPAIR,Dom:TEST,AuthSrv:MACBOOK-DE-TONI,Sun Dec 20 20:41:26 CET 2009]
20:41:27,287 User:toni DEBUG [app.servlet.NTLMAuthenticationFilter] Processing request: /alfresco/wcservice/api/search/keyword/description.xml SID:null
20:41:27,287 User:toni DEBUG [app.servlet.NTLMAuthenticationFilter] Found webscript with no authentication – set NO_AUTH_REQUIRED flag.
20:41:27,288 User:toni DEBUG [app.servlet.NTLMAuthenticationFilter] Authentication not required (filter), chaining …
20:41:29,537 User:toni DEBUG [app.servlet.NTLMAuthenticationFilter] Processing request: /alfresco/wcservice/api/search/keyword/description.xml SID:7784CDFAD8E6B29103D6A2E02FE558F1
20:41:29,540 User:toni DEBUG [app.servlet.NTLMAuthenticationFilter] Found webscript with no authentication – set NO_AUTH_REQUIRED flag.
20:41:29,540 User:toni DEBUG [app.servlet.NTLMAuthenticationFilter] Authentication not required (filter), chaining …
Recuerda añadir el usuario que quieras dotar de permisos administrador en el grupo ALFRESCO_ADMINISTRATOR o añadir el usuario en el authority-services-context.xml, cópialo en <extension> desde el <configRoot> y lo modificas según tus necesidades:
<property name=”adminUsers”>
<set>
<value>${alfresco_user_store.adminusername}</value>
<value>administrator</value>
<value>TU_USUARIO</value>
</set>
</property>
Y listo. Así de fácil.