Active Directory Federation Services (ADFS) – Introducción

En MSDN, Keith Brown ha publicado un artículo muy interesante sobre ADFS, visto desde el punto de vista de un desarrollador.

ADFS es la implementación de Microsoft del protocolo WS-Federation, y su funcionamiento se podría resumir muy brevemente de la siguiente manera: cuando un usuario desde una empresa A navega a una aplicación de una empresa B, su navegador es redirigido automáticamente a un sitio web de la empresa A, donde será autenticado. Este sitio le redirigirá de nuevo a la aplicación de la empresa B, pero esta petición irá acompañada de una serie de datos (firmados por la empresa A) que le identifican como un empleado autorizado para usar la aplicación de la empresa B, además de contener una lista de derechos que la empresa A le otorga.

Si bien esta explicación es muy breve, y sin entrar en detalles, lo importante es que la empresa B confía en el acuerdo que tiene con la empresa A, la cual tiene la responsabilidad de autenticar sus propios usuarios. Esta es la idea central de ADFS, que está disponible en Windows Server 2003 R2, y es un sistema que permite que diferentes directorios activos confíen entre sí para autenticar usuarios. Estos directorios activos podrían ser de diferentes departamentos dentro de una empresa, o de diferentes empresas que colaboran entre sí.

Las razones por las que es conveniente tomar este camino son obvias: Reducir la carga de trabajo derivada de mantener la base de datos de usuarios (llamese como se quiera, bien sea directorio activo, una base de datos propia, etc.). Y para muestra un botón:

  • Si el fabricante decide dejar de trabajar con un distibuidor, simplemente tiene que dar de baja al directorio activo de ese distribuidor. En otro caso, tendría que borrar n registros de su base de datos de usuarios (o del directorio activo).
  • Si el distribuidor tiene una baja en sus empleados (bien sea porque cambia de trabajo, o porque le echan, etc), es de suponer que la distribuidora eliminará a dicho usuario de su directorio activo, ya que no le conviene que esa persona tenga acceso a sus aplicaciones, datos, etc. Eso quiere decir que en el momento en el que la distribuidora dé de baja a esa persona, tampoco tendrá acceso a nuestra aplicación. En caso contrario, el distribuidor tendría que avisarnos para eliminar ese usuario de nuestra aplicación (cosa que probablemente no sucedería…)
  • Igualmente, si el distribuidor contrata a nuevos empleados, la situación es muy similar a la del punto anterior. Nos quitamos problemas nosotros y nuestros clientes (toda solución que consigue esto tiene buena pinta, no?)
  • Etc, etc…

Lo más interesante de ADFS es que se basa en un estándar como WS-Federation, que fué diseñado por Microsoft, IBM, Verisign, BEA, y RSA Security. Por lo tanto, como cada empresa puede elegir distinto software para sus servidores, si nosotros utilizamos ADFS, podremos colaborar (en teoría sin problemas) con empresas que utilicen IBM WebSphere o BEA WebLogic, ya que tanto WebSphere como WebLogic implementan WS-Federation.

En dicho artículo usa como ejemplo la creación de una aplicación web de un fabricante de bicicletas que quiere dar acceso a distribuidores autorizados al catálogo de sus productos. Como se quiere evitar tener que crear usuarios para dichos distribuidores en su aplicación (o en su directorio activo), se toma la decisión de utilizar ADFS para autorizar a los usuarios de la aplicación con las credenciales de los directorios activos de las distribuidoras.

Cuando se establece una relación de confianza utilizando ADFS, uno de los directorios activos ha de proveer los usuarios, y otro deberá proveer los recursos. En el caso del artículo, el fabricante de bicicletas provee los recursos (la aplicación web), y los distribuidores proveen los usuarios. Por lo tanto, el fabricante de bicicletas deberá configurar su directorio activo creando un nuevo recurso que represente su aplicación web, y dar de alta a los distribuidores como Account Partners. Los distribuidores darán de alta al fabricante como Resource Partners.

ADFS está basado en una serie de derechos (claims) que cada empresa otrorga a sus empleados. Cada empresa se define su propio conjunto de derechos, y los asigna a sus empleados según sus políticas internas. Esto hace que a primera vista sea complicado la colaboración entre diferentes empresas. Sin embargo, ADFS permite establecer transformaciones de derechos para cada uno de nuestros colaboradores, de manera que cuando un usuario se autentica en su empresa, cuando vuelva a nuestra aplicación su petición viene acompañada por una lista de derechos que le otorga su empresa. Nuestra aplicación no tiene por qué entender dicha lista de derechos, pero ADFS se encarga de buscar las correspondencias adecuadas (si es que las hemos definido), y cuando nuestra aplicación examine los derechos del usuario, será capaz de entenderlos. Lo más interesante es que si un colaborador decide ampliar la lista de derechos, y no nos informan de dicha notificación, nuestra aplicación puede seguir funcionando, siempre y cuando sigan estando definidos los derechos que equivalen a los que nuestra aplicación necesita. Y sin tocar ni una línea de código.

Incluso si los derechos no se pueden transformar mediante configuración, podemos implementar un componente que implemente IClaimTransform. Un ejemplo de una transformación puede ser el decidir si una persona es mayor de edad, ya que el directorio activo sólo almacena la fecha de nacimiento.

Bueno… Por hoy ya es suficiente. En un segundo artículo veremos cómo configurar ADFS para que una aplicación web pueda utilizarlo como método de autenticación.

3 comentarios en “Active Directory Federation Services (ADFS) – Introducción”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *