Autenticación de clave API
La autenticación por clave API (API Key Authentication) es uno de los métodos más sencillos para proteger las APIs REST de Drupal. Una vez que hayas generado claves API para todos tus usuarios, puedes utilizar esas claves para asegurar el acceso a tus APIs REST de Drupal.
Puedes hacerlo enviando el nombre de usuario de Drupal y la clave API en la cabecera Authorization de cada solicitud API. El módulo Drupal API Authentication autenticará la solicitud basándose en el nombre de usuario y la clave API correspondiente. 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 basada en clave API en Drupal:
- Para una mejor comprensión, tomaremos como ejemplo agregar autenticación basada en clave API a la API de creación de usuarios en Drupal.
- Nota: la API /entity/user de Drupal se utiliza para crear un usuario en Drupal.
Habilita la API y asigna métodos y operaciones de la siguiente manera:
- El primer paso es habilitar la API y también asignar los métodos y operaciones permitidos en esa API en particular. Esto se puede hacer usando el módulo REST UI o modificando la configuración directamente.
- 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, debemos habilitar la API /entity/user. Habilítala usando 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 /entity/user. Haz clic en el botón Guardar configuración para continuar.
Crear un campo de clave API para usuarios en Drupal:
Nota: Si utilizas la versión gratuita del módulo, puedes omitir este paso.
En este paso, configuraremos cómo se utiliza la clave API para autenticar las llamadas a la API. Primero debemos crear un campo de atributo de usuario para almacenar una clave API.
- Ve a la pestaña de gestión de campos (/admin/config/people/accounts/fields) de Drupal.
- Para añadir el campo, haz clic en el botón Añadir campo.
- Ahora, en el desplegable Añadir un nuevo campo, selecciona la opción Texto (Plano) e ingresa API Key en el campo de etiqueta. Haz clic en Guardar y continuar para guardar los cambios.
- Asegúrate de que el nombre de máquina del atributo de usuario sea field_api_key.
- Ahora haz clic en Guardar la configuración del campo y después en el botón Guardar configuración para completar la creación del campo.
- Ahora verás un campo adicional de texto para la clave API en el perfil de usuario.
Configura la autenticación basada en clave API:
- En este paso, generaremos una clave API. Para ello, ve a la pestaña de Autenticación 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.
- Para activar la autenticación basada en clave API, selecciona el botón de opción API Key.
- En esta pantalla puedes generar la clave API para un usuario en particular o para todos los usuarios a la vez.
- En este ejemplo, generaremos la clave API solo para un usuario.
- En el campo de texto Introduce el nombre de usuario, introduce el nombre de usuario para el cual deseas generar la clave API y haz clic en Generar clave API para este usuario.
- Ahora puedes ver la clave API generada en el campo de clave API del perfil de usuario.
- Mantén la clave API a mano, ya que la necesitarás más adelante para autenticar la API.
Concede permisos a los roles de Drupal para crear un usuario:
- Si lo necesitas, también puedes otorgar a los roles de Drupal no administradores el permiso para crear usuarios. Puedes hacerlo asignando los 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 usando una clave API para la autenticación.
Ejemplo:
- Para crear un usuario en Drupal debes realizar una solicitud POST junto con el nombre de usuario y la clave API emitida por el módulo miniOrange REST API Authentication. El valor del nombre de usuario y la clave API debe estar en formato base64encoded. Consulta el siguiente formato para hacer la solicitud.
Solicitud: POST <tu_drupal_base_url>/entity/user?_format=json
Cabecera: Authorization: Basic base64encoded <username:api_key>
Accept: application/json
Content-Type: application/jsonCuerpo:
{
"name": [
{"value": "<username>"}
],
"mail": [
{"value": "<email>"}
],
"pass":[
{"value": "<password>"}
],
"status":[
{"value": "1"}
]
}Solicitud CURL-
curl --location --request POST ‘<tu_drupal_base_url>/entity/user?_format=json' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic base64encoded<username:API key>’ \
--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 |
MISSING_AUTHORIZATION_HEADER |
Obtendrás este error si no envías la cabecera Authorization en la solicitud API o si tu servidor la elimina por algún motivo. Ejemplo: |
INVALID_AUTHORIZATION_HEADER_TOKEN_TYPE | Obtendrás este error si envías la cabecera Authorization pero en un formato inválido. Ejemplo: { "status": "error", "error": "INVALID_AUTHORIZATION_HEADER_TOKEN_TYPE", "error_description": "Authorization header must be the type of Basic Authentication." } |
USER_DOES_NOT_EXIST |
Obtendrás este error si el módulo no encuentra ninguna cuenta que pertenezca al nombre de usuario enviado en la solicitud. Ejemplo: |
INVALID_API_KEY |
Obtendrás este error si la clave API enviada en la llamada API no coincide. Ejemplo: |
USER_NAME_MISSING |
Obtendrás este error si el módulo no encuentra el nombre de usuario en la llamada API. Ejemplo: |
INVALID_AUTHORIZATION_HEADER |
Obtendrás este error si el módulo no puede decodificar la cabecera correctamente o no encuentra el nombre de usuario y la clave API en la cabecera. Ejemplo: |
Artículo de la Documentación de Drupal.