External Authentication
Un módulo auxiliar que proporciona servicios para autenticar usuarios utilizando sitios o servicios externos y almacenar los detalles de identificación en una tabla authmap.
externalauth
Install
composer require 'drupal/externalauth:^2.0'
Overview
El módulo External Authentication proporciona un servicio genérico para iniciar sesión y registrar usuarios que se autentican contra un sitio o servicio externo y almacenar los detalles de autenticación. Sirve como el equivalente en Drupal 8+ de user_external_login_register() y funciones relacionadas, así como de la tabla authmap que existía en Drupal 6 y 7 core.
Este módulo está diseñado como una API fundamental para que otros módulos de autenticación externa (como SAML, LDAP, OAuth, etc.) construyan sobre él. Proporciona una API consistente para almacenar y recuperar datos de autenticación externa, mapeando identidades externas a cuentas de usuario de Drupal.
El módulo almacena los mapeos de autenticación en una tabla de base de datos 'authmap', vinculando los nombres de autenticación externa (authnames) proporcionados por los proveedores de autenticación con las cuentas de usuario de Drupal. Cada mapeo también puede almacenar datos serializados adicionales específicos del proveedor de autenticación.
Features
- Proporciona servicios para cargar, iniciar sesión, registrar y vincular usuarios de Drupal basándose en nombres de autenticación externa
- Almacena datos de mapeo de autenticación (authname a ID de usuario de Drupal) en una tabla de base de datos authmap dedicada
- Soporta almacenamiento de datos serializados adicionales con cada mapeo de autenticación para información específica del proveedor
- Dispara eventos durante el inicio de sesión, registro y alteración del authmap para que otros módulos reaccionen o modifiquen el comportamiento
- Incluye una interfaz administrativa basada en Views para gestionar los enlaces de autenticación externa entre usuarios y proveedores
- Limpia automáticamente las entradas del authmap cuando se eliminan usuarios de Drupal
- Proporciona plugins de migración para actualizar datos del authmap desde instalaciones de Drupal 6 y Drupal 7
- Soporta múltiples proveedores de autenticación por usuario, permitiendo a los usuarios iniciar sesión a través de diferentes servicios externos
Use Cases
Integración de inicio de sesión único SAML
Al implementar SSO basado en SAML usando un módulo como samlauth, el módulo externalauth almacena el mapeo entre el NameID de SAML (identificador externo) y las cuentas de usuario de Drupal. El módulo samlauth llama a externalauth.externalauth->loginRegister() para manejar la autenticación de usuarios, creando automáticamente nuevas cuentas de Drupal para usuarios SAML que inician sesión por primera vez.
Autenticación LDAP
Para autenticación LDAP, el módulo externalauth mapea los Distinguished Names (DN) de LDAP o nombres de usuario a cuentas de Drupal. Cuando un usuario se autentica vía LDAP, el módulo de autenticación usa los servicios de externalauth para encontrar o crear el usuario de Drupal correspondiente y establecer la sesión de inicio de sesión.
Inicio de sesión OAuth/OpenID Connect
Las implementaciones de inicio de sesión social usando OAuth u OpenID Connect pueden usar externalauth para mapear identificadores de usuarios externos (como IDs de usuario de Google o Facebook) a cuentas de Drupal. Esto permite funcionalidad tipo 'Iniciar sesión con Google' mientras se mantiene un mapeo adecuado de cuentas de usuario.
Autenticación con múltiples proveedores
Las organizaciones que permiten a los usuarios autenticarse a través de múltiples sistemas externos (ej., tanto SAML como LDAP) pueden usar externalauth para gestionar mapeos para cada proveedor. Un solo usuario de Drupal puede tener múltiples entradas en el authmap, una por proveedor, permitiendo opciones de autenticación flexibles.
Migración de sitios desde Drupal 6/7
Al migrar desde sitios Drupal 6 o 7 que usaban autenticación externa, las plantillas de migración (d6_authmap y d7_authmap) preservan los mapeos de autenticación existentes, asegurando que los usuarios puedan continuar iniciando sesión con sus credenciales externas después de la migración.
Desarrollo de proveedores de autenticación personalizados
Los desarrolladores que crean módulos de autenticación personalizados pueden usar externalauth como base. Al llamar a los servicios proporcionados, los módulos personalizados pueden enfocarse en la lógica de autenticación específica de su proveedor mientras confían en externalauth para el registro de usuarios, finalización del inicio de sesión y almacenamiento de mapeos.
Tips
- Usa ExternalAuthAuthmapAlterEvent para personalizar el nombre de usuario de Drupal generado durante el registro, evitando el formato predeterminado provider_authname si es necesario
- La vista del authmap en /admin/people/authmap acepta filtros contextuales, así que puedes acceder a listas específicas del proveedor en /admin/people/authmap/{provider}
- Almacena datos específicos del proveedor en el parámetro authmap_data al llamar a register() o linkExistingAccount() - estos datos se serializan y almacenan con el mapeo
- Suscríbete al evento externalauth.register para realizar configuración adicional del usuario después del registro externo (ej., asignar roles basados en atributos externos)
- El método linkExistingAccount() devuelve FALSE si la cuenta ya está vinculada con el mismo authname, permitiendo operaciones idempotentes
- Cuando se usan múltiples proveedores de autenticación externa, considera personalizar la vista del authmap para mostrar la columna del proveedor para mayor claridad
Technical Details
Admin Pages 2
/admin/people/authmap
Una página administrativa basada en Views que muestra todos los mapeos de nombres de autenticación externa registrados por los métodos de autenticación externa para cada usuario. La página muestra el Nombre de Autenticación (identificador externo), ID de Usuario de Drupal, Nombre de Usuario de Drupal (con enlace al perfil de usuario) y un enlace de operación de eliminación. La lista puede filtrarse por nombre de autenticación y usuario de Drupal. Las vistas específicas por proveedor están disponibles en /admin/people/authmap/{provider} (ej., /admin/people/authmap/samlauth).
/admin/people/authmap/{provider}/{uid}/delete
Formulario de confirmación para eliminar un enlace de autenticación externa específico entre un nombre de autenticación y una cuenta de usuario de Drupal. El formulario muestra el nombre de autenticación y el nombre de usuario de Drupal que se desvincularán y requiere confirmación antes de la eliminación.
Permissions 2
Hooks 1
hook_user_delete
Elimina automáticamente todas las entradas del authmap para un usuario cuando se elimina la cuenta de usuario, asegurando la integridad de los datos.
Troubleshooting 4
Verifica la tabla authmap para confirmar que existe un mapeo para el authname externo y proveedor del usuario. Usa la vista de administración en /admin/people/authmap para buscar el nombre de autenticación. Si no existe ningún mapeo, el usuario puede necesitar registrarse primero o tener su cuenta vinculada.
Esto típicamente ocurre cuando hay múltiples proveedores de autenticación activos. Añade el campo 'provider' a la configuración de la vista, o usa URLs específicas del proveedor como /admin/people/authmap/samlauth para filtrar por proveedor.
Esta excepción se lanza cuando ya existe un usuario con el mismo nombre de usuario de Drupal. Asegúrate de que se generen nombres de usuario únicos (el predeterminado es provider_authname) o maneja la excepción vinculando a la cuenta existente en su lugar.
El módulo implementa hook_user_delete para limpiar las entradas del authmap automáticamente. Asegúrate de que el módulo esté habilitado y funcionando correctamente. La limpieza manual puede hacerse a través de la interfaz de administración o directamente en la base de datos.
Security Notes 5
- Los módulos de autenticación externa deben validar los authnames y datos de usuario de fuentes externas antes de pasarlos a los servicios de externalauth
- La operación de eliminación para entradas del authmap requiere el permiso 'delete authmap' - otorga esto solo a administradores de confianza
- Los authnames no se exponen en las URLs del formulario de eliminación para prevenir la filtración de identificadores externos en los logs de HTTP referrer
- La tabla authmap almacena datos de mapeo sensibles - asegúrate de que haya controles de acceso a la base de datos apropiados
- Al implementar proveedores de autenticación personalizados, valida que la respuesta de autenticación externa sea legítima antes de llamar a los servicios de login/register