miércoles, septiembre 16, 2009

Autenticación NTLM en Alfresco con Active Directory

En muchas ocasiones, aunque el servidor de autenticación sea un Windows 2000 Server, Windows 2003 Server o posterior y sus usuarios estén en el Active Directory no es necesario tener que configurar Alfresco para que autentique como tal vía LDAP/Active Directory.

Windows 2000 y superiores utilizan la autenticación mixta vía LDAP (Active Directory) y TLM v2 y por tanto podemos configurar Alfresco tocando solamente 3 ficheros, que serán:

web.xml
ntlm-authentication-context.xml
file-servers-custom.xml

En Alfresco, este tipo de autenticación donde no solo se usa el protocolo "desafío/respuesta" NTLM sino que además se usa contra una base de datos de usuarios de Windows, para la identificación de cada persona, se le denomina "NTLM passthru".

Se usa ${tomcat} como identificador del punto de comienzo del servidor de aplicaciones que en este caso es Apache-Tomcat.

Primero hay que activar los filtros necesarios para la autenticación vía web en ${tomcat}/webapps/alfresco/WEB-INF/web.xmldescomentando las líneas siguientes:

<filter-class>org.alfresco.web.app.servlet.NTLMAuthenticationFilter</filter-class>

<filter-class>org.alfresco.repo.webdav.auth.NTLMAuthenticationFilter</filter-class>

<filter-mapping>
<filter-name>Authentication
Filter</filter-name>
<url-pattern>/navigate/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>Authentication
Filter</filter-name>
<url-pattern>/command/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>Authentication
Filter</filter-name>
<url-pattern>/download/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>Authentication
Filter</filter-name>
<url-pattern>/template/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>Authentication
Filter</filter-name>
<url-pattern>/n/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>Authentication
Filter</filter-name>
<url-pattern>/c/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>Authentication
Filter</filter-name>
<url-pattern>/t/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>Authentication
Filter</filter-name>
<url-pattern>/d/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>Authentication
Filter</filter-name>
<url-pattern>/ajax/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>Authentication
Filter</filter-name>
<url-pattern>/wcs/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>Authentication
Filter</filter-name>
<url-pattern>/wcservice/*</url-pattern>
</filter-mapping>

Lo mejor es buscar la cadena "NTLM" y a partir de ahí descomentar estas líneas.

El siguiente fichero a configurar es ${tomcat}/share/classes/alfresco/extension/ntlm-authentication-context.xml donde solo hay que establecer el servidor o servidores Windows que contienen el Active Directory.

En este caso, por ejemplo:

<property name="servers">
<value>MIDOMINIO\serv001, serv001</value>
</property>

Y por último el fichero ${tomcat}/share/classes/alfresco/extension/file-servers-custom.xml que es el que nos permitirá acceder a los recursos CIFS (SMB) desde Windows o desde Linux. Aquí se configura para usar "passthru" así como los servidores necesarios.

Por ejemplo:

<config evaluator="string-compare" condition="FilesystemSecurity">
<authenticator type="passthru">
<Server>MIDOMINIO\serv001, serv001</Server>
</authenticator>
</config>

Con esto ya estaría configurado nuestro sistema para autenticación NTLM y acceso a los recursos vía CIFS/SMB. Bastará con poner en la dirección del navegador de ficheros la dirección del host o servidor Alfresco:

En Windows como \\serv001

En Linux, generalmente como smb://srv001

Observaciones: Hay que tener en cuenta que si es un entorno Linux los puertos usados
para los recursos CIFS/SMB (puertos 137, 138, 139 y 445) solo pueden abrirse por el usuario root y no por un usuario sin privilegios de administración. En este último caso habría que utilizar puertos por encima del 1024 reasignándose dentro de la configuración (en el
propio fichero file-servers-custom.xml) y utilizando un sistema de "forwading" o "NAT" con un router.