Integración Single Sign-On (SSO) para Drupal
¿Se puede integrar Drupal con un SSO? La respuesta a esta pregunta es sí.
Single Sign-On (SSO) es un procedimiento de autenticación centralizado, que permite al usuario acceder a diferentes sistemas sobre los que tiene permiso, con una sola instancia de autenticación. De esta forma, una vez que el usuario se identifica en el sistema, no es necesario introducir de nuevo las credenciales cada vez que acceda a una nueva aplicación.
Un sistema de SSO se compone de dos partes principales: un servicio de autenticación (IdP), típicamente único por institución y una serie de elementos (SP) que se sitúan en cada aplicación que requiere autenticación.
Existen varios protocolos para realizar la integración nuestro sistema (SAML, PAPI, CAS, OPENSSO) pero usaremos la nomenclatura de SAML para estos elementos: IdP (Identity Provider) y SP (Service Provider), en el cual se basa el módulo del que estamos hablando.
De hecho, el módulo simpleSAMLphp Authentication, integra Drupal con simpleSAMLphp, la más robusta y completa implementación de SAML en PHP, que permite ser usado como IdP y como SP según sea configurado.
Por ello, para que nuestro Drupal se integre dentro del SSO de la organización, es necesario la instalación de una instancia de simpleSAMLphp configurada para funcionar como SP (Service Provider). Dicha instancia debe ser la versión 1.6 o superior de este software, para ser compatible con nuestro módulo.
En resumen podríamos definir a grandes rasgos el proceso de integración como:
- Instalación de simpleSAMLphp
- Configuración de simpleSAMLphp como SP.
- Instalar Drupal
- Instalar el módulo simpleSAMLphp Authentication
- Configurar el módulo
- Activar el módulo.
Configuración de simpleSAMLphp Authentication
Una vez instalado y configurado simpleSAMLphp como Service Provider (SP), pasamos a instalar y configurar el módulo simpleSAMLphp Authentication que nos permitirá conectar y comunicar nuestro Drupal con su SP asociado y este con el IdP.
Una vez activado el módulo, podemos encontrar su interfaz de configuración dentro del apartado de administración de usuarios.
En dicha ventana nos encontramos con las siguientes variables configurables:
-
Activate authentication via SimpleSAMLphp: Para el que la autenticación mediante SSO tenga efecto tenemos que marcar esta casilla. Hay que tener la precaución de marcar la casilla cuando el módulo esté completamente configurado.
- Installation directory: En este campo hay que especificar la ruta física de disco donde se encuentra instalada la instancia de simpleSAMLphp como SP, asociada al portal.
- Autenticaton source for this SP: Indicar la clave de autenticación configurada en el SP. Por defecto toma el valor “default-sp”.
- Which attribute from simpleSAMLphp should be used as user's name: En este campo hay que especificar el nombre del atributo del IdP que nos propaga al SP asociado al portal, que contiene el nombre de usuario. Si por ejemplo, en un LDAP se almacena el nombre de usuario en un campo llamado “username” y así se propaga al SP, éste es el valor a introducir en este parámetro.
- Which attribute from simpleSAMLphp should be used as unique identifier for the user: En este caso hay que especificar el nombre del atributo del drupal que sirve como identificador único del usuario. Debemos especificar el valor “uid”.
- Which attribute from simpleSAMLphp should be used as user mail address: En este campo hay que especificar el nombre del atributo del drupal que sirve como email del usuario. Debemos especificar el valor “mail”.
- Automatic role population from simpleSAMLphp attributes: Este campo nos permite definir los valores de los roles de usuario a añadir al mismo tras el login. Se pueden incluir condicionales para discriminar entre un rol y otro.
- Reevaluate roles every time the user logs in: Casilla de verificación asociada al campo anterior, que nos permite recargar los roles especificados, cada vez que el usuario se identifique en el sistema. Hay que tener precaución con esta casilla ya que si la marcamos, podemos “perder” los roles asociados al usuario de forma manual a través del panel de administración.
- Force https for login links: Esta casilla nos permite forzar las identificaciones mediante el protocolo https.
- Register users: Si marcamos esta casilla el sistema inserta el usuario en el drupal si no existe, tras una identificación positiva en el SSO.
- Allow authentication with local Drupal accounts: Esta casilla de verificación permite autenticaciones locales de usuarios sin pasar por el proceso de SSO. Esto normalmente se hace para el usuario administrador del portal. Este campo va en conjunto con el siguiente que describimos a continuación.
- Which users should be allowed to login with local accounts?: En este campo hay que introducir los uid de los usuarios separados por comas, que queremos que puedan identificarse de forma local al portal sin pasar por el SSO. Si solo queremos el valor del superadministrador se introducirá el número 1.
Una vez configurado, el módulo nos proporciona dos vías de acceso al login mediante SSO. Una primera en la que se modifica la caja de login por defecto de Drupal, y en la que sustituye los campos nombre de usuario y contraseña por un enlace al mismo, y una segunda, en forma de nuevo bloque, que contiene dicho enlace.
Pues bien, tanto si realizamos el cambio de una manera como de otra, tras hacer clic sobre el nuevo enlace de login, el usuario será redirigido a la ventana de autenticación de la organización. Tras introducir las credenciales correctas de éste en la misma, el usuarios será validado y redirigido de vuelta al portal, al que pasará autenticado como hemos comentado anteriormente.
Conclusión
Como conclusión podemos destacar que simpleSAMLphp Authentication, junto con una instancia de simpleSAMLphp configurada como Service Provider (SP), nos permite integrar nuestro Drupal con el SSO de la organización de una manera sencilla y cómoda de utilizar. Esto nos garantiza por tanto, todas las ventajas que un SSO proporciona. Además, es un módulo como hemos visto, que soporta varios protocolos de comunicación (SAML, PAPI, CAS, etc.), gracias a simpleSAMLphp, lo que proporciona una gran flexibilidad de integración de otras aplicaciones, y que permite combinar autenticaciones locales de usuarios específicos con autenticaciones SAML.