Configurar Spring Security 3.1 para autenticarse contra un Active Directory

3
22730

Configurar Spring Security 3.1 para autenticarse contra un Active Directory.

0. Índice de contenidos.


1. Introducción

Muchas aplicaciones contienen una o varias zonas restringidas donde solo pueden acceder usuarios registrados. Para poder acceder la zona restringida es necesario un proceso de autenticación.

Es muy común que las aplicaciones almacenen los datos de los usuarios en una base de datos relacional y accedan a dicha información cuando los usuarios quieran acceder a zonas restringidas para comprobar si deben darles acceso o no.

Otra muy buena opción podría ser acceder, en vez de a una base de datos relacional, a un servicio de directorio a través de un LDAP. La estructura jerárquica de un servicio de directorio es ideal como servicio centralizado para que los usuarios puedan autenticarse en una o varias aplicaciones.

En este tutorial vamos a ver cómo configurar una aplicación con Spring Security 3.1. para que los usuarios se autentiquen contra un servidor que soporte protocolo LDAP, en concreto contra un Directorio Activo de Microsoft.


2. Entorno.

El tutorial está escrito usando el siguiente entorno:

  • Hardware: Portátil MacBook Pro 15′ (2.2 Ghz Intel Core I7, 4GB DDR3).
  • Sistema Operativo: Mac OS Snow Leopard 10.6.7
  • Entorno de desarrollo: Eclipse 3.6.2.
  • Spring Security 3.1.
  • Apache Directory Studio 1.5.3.
  • Virtual Box 4.0.8 con Windows 2003 Server.


3. El Active Directory de Microsoft

Active Directory es la implementación de Microsoft de una estructura de directorios para equipos conectados a una red, que soporta protocolo LDAP. Almacena información sobre usuarios, grupos de usuarios, dominios, permisos, equipos, etc… Esta información está estructurada en una forma jerárquica que permite a los objetos relacionarse entre sí.

En la siguiente imagen podemos ver los objetos que el Directorio Activo de nuestro ejemplo tiene en su directorio de usuarios. Podemos ver que se distinguen entidades de dos tipos: usuarios y grupos de usuarios.

Para poder ver mejor las entidades de nuestro Active Directory, utilizaremos un cliente de LDAP llamado Apache Directory Studio.

Para configurar una conexión contra el Directorio Activo, únicamente tenemos que darle un nombre, la dirección de la máquina y puerto donde está y un usuario administrador y su clave.

Datos del Directorio Activo:

Datos del usuario administrador:

Si todo salió correctamente podremos ver de forma más detallada la información de los usuarios del Directorio Activo:

Como se puede ver, Apache Directory Studio nos muestra más información de la que podemos ver a primera vista en el Directorio Activo.

Centrémonos en el usuario Miguel y algunos de sus atributos:

  • distinguishedName (DN): Es el nombre que distingue el objeto (el usuario Miguel) dentro del Directorio Activo. Indica la ubicación de nuestro elemento dentro de la estructura de directorios. En nuestro caso es un elemento con CN (Common Name) igual a Miguel, que está en un directorio con CN=Users, que cuelga del directorio raíz (DC=autentia,DC=com).
  • memberOf: indica que el usuario pertenece a dos grupos de usuarios: Administradores de esquema y Administradores de organización. Serán los roles del usuarios autenticado.
  • sAMAccountName: es el nombre de usuario con el que nos autentiaremos en el Directorio Activo.


4. Configuración de Spring Security.

Una vez tenemos clara la información que contiene nuestro Directorio Activo, vamos a proceder a ver cómo se configura Spring Security para que se autentiquen correctamente los usuarios.

Esto sería lo que tendríamos que añadir en nuestro applicationContext-security.xml:


  
 		
 	
 


<ldap-server url="ldap://xxx.xxx.xxx.xxx:389/dc=autentia,dc=com" id="ldapLocal" manager-dn="marlandy@autentia.com" manager-password="XxXxXxXx123" />


Vamos a explicar qué hemos hecho:

En el tag ldap-server configuramos los datos relativos al Directorio Activo. Es muy parecido a lo que hicimos cuando configuramos la conexión con Apache Directory Studio.

En el tag authentication-manager configuramos la forma en que Spring Security recuperará los datos de autenticación del usuario:

  • user-search-filter (sAMAccountName): definimos el nombre de usuario que se autenticará y decimos que debe coincidir con el atributo sAMAccountName del objeto (del usuario) del Active Directory.
  • user-search-base (cn=Users): indicamos el directorio donde están los usuarios dentro del LDAP.
  • group-search-base (cn=Users): indicamos el directorio donde se encuentran los grupos de usuarios (roles) a los que puede pertenecer nuestro usuario.
  • group-role-filter (member={0}): indicamos que un usuario pertenece a un grupo por cada atributo member que contenga el objeto.
  • group-role-attribute (cn): Atributo que nos dará el nombre del grupo al que pertenece el usuario. Como en nuestro ejemplo uno de los grupos al que pertenecía el usuario era CN=Administradores de organización,CN=Users,DC=autentia,DC=com, al decirle que queremos que el grupo sea el valor del atributo cn, el nombre del grupo será Administradores de organización.

Si todo salió correctamente, al introducir el nombre de usuario y clave en el formulario de login, nos autenticaremos contra el Directorio Activo y Spring Security almacenará en los datos de autenticación (Principal) la información del usuario.


5. Referencias.


6. Conclusiones.

En este tutorial hemos visto cómo configurar Spring Security para autenticarnos contra un LDAP, en concreto contra un Active Directory.

Nótese que faltaría configurar la parte de áreas restringidas, página de login o, incluso, un manejador de autenticaciones existosas, pero no era el objetivo del tutorial.

Espero que este tutorial os haya sido de ayuda. Un saludo.

Miguel Arlandy

marlandy@autentia.com

3 COMENTARIOS

  1. Hola, estoy manejando en un proyecto spring security y la autentificacion la realizo con ldap pero tengo un problema no se como implementar que se conecte a 2 ldap segun el dominio seleccionado

    muchas gracias por el apoyo.

    saludos..

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad