Autenticación de API REST mediante un proveedor de identidad externo
Si buscas proteger o restringir el acceso a tus APIs REST de Drupal utilizando tu proveedor de identidad, entonces debes optar por el método de Autenticación con Proveedor de Identidad Externo.
La autenticación de API de Drupal usando un proveedor de identidad externo implica el uso de tokens recibidos de proveedores de terceros como Google, Azure AD, Keycloak, Okta, Gitlab, etc., para acceder de forma segura a las APIs REST de Drupal.
En este método, debes configurar el módulo con el User Info Endpoint proporcionado por tu proveedor de identidad y el atributo de nombre de usuario desde tu proveedor de identidad. Así, podrás autenticar todas las solicitudes a la API de Drupal usando el token proporcionado por tu proveedor. El Módulo Drupal REST API verifica las credenciales de usuario recibidas con la cuenta de usuario de Drupal. Este módulo es compatible con Drupal 7, Drupal 8, Drupal 9, Drupal 10 y Drupal 11.
Video de configuración:
Requisitos previos: Descarga e instalación:
- Descarga e instala el módulo Drupal REST & JSON API Authentication.
- REST UI: Este módulo te proporciona una interfaz gráfica para configurar el módulo REST.
- Habilita los siguientes módulos de Servicios Web desde la sección Extender (/admin/modules) de tu sitio Drupal:
- REST UI
- RESTful Web Services
- Serialization
Pasos para configurar la autenticación de API usando una aplicación/proveedor de identidad externo:
- Para una mejor comprensión, tomaremos como ejemplo la autenticación basada en un proveedor de identidad externo para la API de creación de usuarios en Drupal.
- Ten en cuenta que la API /entity/user de Drupal se utiliza para crear un usuario en Drupal.
Habilita la API y asigna los métodos y operaciones de la siguiente manera:
- El primer paso es habilitar la API y asignar los métodos y operaciones permitidos en esa API en particular. Esto se puede hacer usando el módulo REST UI o simplemente modificando la configuración.
- Para habilitar la API usando el módulo REST UI, haz clic en el botón Configurar del módulo REST UI (como se muestra abajo)
- En nuestro ejemplo, tenemos que habilitar la API /entity/user que se encuentra bajo Usuario. Habilita esta API haciendo clic en la opción Habilitar frente a ella.
- Ahora, como nuestro objetivo es crear un usuario en Drupal, selecciona las siguientes configuraciones:
- Método: POST
- Formato: json
- Proveedor de autenticación: rest_api_authentication
- Seleccionar rest_api_authentication permitirá que el módulo miniOrange REST API Authentication autentique tu API. Haz clic en el botón Guardar configuración para continuar.
Configuración del módulo Drupal REST API Authentication:
- En este paso, configuraremos Proveedor de Identidad Externo como método de autenticación de la API. Para ello, navega a la pestaña de Autenticación de API del módulo REST API Authentication (/admin/config/people/rest_api_authentication/auth_settings)
- Marca la casilla Habilitar autenticación y haz clic en Guardar configuración.
- Debajo del botón Guardar configuración, selecciona el botón de opción Proveedor de Identidad Externo.
- En el campo de texto User Info Endpoint, introduce el endpoint de información de usuario de tu proveedor de identidad para que el módulo pueda obtener la información del usuario usando el token proporcionado.
- Además, en el campo Username Attribute ingresa la clave/nombre de atributo de tu proveedor de identidad donde el proveedor externo está enviando el nombre de usuario.
Concede permisos a los roles de Drupal para crear un usuario en Drupal:
- Si lo necesitas, también puedes otorgar a roles no administradores el permiso para crear un usuario en Drupal. Puedes hacerlo asignando roles de Drupal al permiso Administrar usuarios desde la sección de permisos (/admin/people/permissions) de tu sitio Drupal.
¡Eso es todo!
- Ahora, probemos crear un usuario en Drupal mediante una llamada API utilizando un proveedor de identidad externo para la autenticación.
Ejemplos:
- Para crear un usuario en Drupal debes realizar una solicitud POST junto con el Token recibido de tu proveedor de identidad.
Solicitud: POST <tu_drupal_base_url>/entity/user?_format=json
Cabecera: Token: <Token_recibido_del_proveedor_de_identidad_externo>
Accept: application/json
Content-Type: application/jsonCuerpo: {
"name": [
{"value": "<usuario>"}
],
"mail": [
{"value": "<correo_electrónico>"}
],
"pass":[
{"value": "<contraseña>"}
],
"status":[
{"value": "1"}
]
}Formato de solicitud CURL-
curl --location --request POST ‘<tu_drupal_base_url>/entity/user?_format=json' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'Token: <Token_recibido_del_proveedor_de_identidad_externo>' \
--data-raw '{
"name": [
{"value": "Usuario"}
],
"mail": [
{"value": "correo@correo.com"}
],
"pass":[
{"value": "Contraseña"}
],
"status":[
{"value": "1"}
]
}'
- También puedes consultar la imagen de la solicitud Postman añadida abajo:
- Una respuesta exitosa devuelve la información del usuario que has creado. (consulta la imagen a continuación)
- Si recibes algún error en la respuesta, puedes consultar la siguiente tabla para la descripción del error y posibles soluciones.
Respuesta de error:
Error | Descripción |
INVALID_USER_INFO_ENDPOINT | Obtendrás este error si proporcionas una URL de información de usuario incorrecta en la configuración del módulo. |
INVALID_USERNAME_ATTRIBUTE | Obtendrás este error si proporcionas un atributo de nombre de usuario incorrecto en la configuración del módulo o si hay un error al intentar recuperar el nombre de usuario. |
INVALID_TOKEN | Obtendrás este error si el token proporcionado es incorrecto o falta en la cabecera. |
Artículo de la Documentación de Drupal.