logo

Extra Block Types (EBT) - Nueva experiencia con Layout Builder❗

Extra Block Types (EBT): tipos de bloques con estilo y personalizables: Presentaciones de diapositivas, Pestañas, Tarjetas, Acordeones y muchos más. Configuraciones integradas para fondo, DOM Box y plugins de JavaScript. Experimenta hoy el futuro de la construcción de diseños.

Módulos de demostración EBT Descargar módulos EBT

❗Extra Paragraph Types (EPT) - Nueva experiencia con Paragraphs

Extra Paragraph Types (EPT): conjunto de módulos basado en párrafos de forma análoga.

Módulos de demostración EPT Descargar módulos EPT

Scroll

Configurar token de acceso/autenticación basada en OAuth

18/05/2025, by Ivan

OAuth (Open Authorization) es un estándar abierto para la autenticación y autorización basada en tokens, que puede utilizarse para ofrecer inicio de sesión único (SSO). OAuth permite que información específica de la cuenta de un usuario final sea utilizada por servicios de terceros, como Facebook, etc., sin exponer la contraseña del usuario. Actúa como un intermediario en nombre del usuario final, proporcionando al servicio un token de acceso que autoriza el intercambio de información específica de la cuenta.

Este método de autenticación de la API de Drupal utiliza el protocolo OAuth 2.0 para obtener un token de acceso de seguridad. Este token se utiliza para autenticar el acceso a las APIs de tu sitio Drupal. El método OAuth proporciona un token de acceso altamente cifrado y seguro, asegurando que tus APIs de Drupal estén bien protegidas. Se considera uno de los métodos más seguros para prevenir accesos no autorizados a tus endpoints REST o JSONAPI de Drupal. Este módulo es compatible con Drupal 7, Drupal 8, Drupal 9, Drupal 10 y Drupal 11.

 Descargar  

Video de configuración:

Video de YouTube sobre autenticación OAuth/Access Token en Drupal REST API

En OAuth 2.0, intervienen las siguientes tres partes:

  • El usuario posee los datos que se acceden a través de la API y desea permitir que la aplicación acceda a ellos.
  • La aplicación quiere acceder a los datos a través de la API en nombre del usuario.
  • El endpoint de API, controla y habilita el acceso a los datos del usuario.

La API concederá acceso solo cuando reciba un token de acceso válido desde la aplicación. La manera en que la aplicación obtiene un token de acceso depende del esquema OAuth que se utilice.

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 de usuario 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:
    • JSON: API
    • REST UI
    • RESTful Web Services
    • Serialization

    Habilitar módulos

Pasos para configurar la autenticación de API basada en OAuth/Access Token:

  • Para una mejor comprensión, tomaremos como ejemplo agregar autenticación basada en OAuth/Access Token a la API de obtención de información de usuario para Drupal.
  • Nota: la API de obtención de información de usuario de Drupal se utiliza para recuperar información de usuario.

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 utilizando 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)

    REST UI

  • En nuestro ejemplo, queremos habilitar la API /user/{user} que se encuentra bajo la sección Contenido. Habilita esta API usando la opción Habilitar frente a ella.

    REST API

  • Ahora, como nuestro objetivo es recuperar información de usuario, selecciona las siguientes configuraciones:
    • Método: GET
    • Formato: json
    • Proveedor de autenticación: rest_api_authentication
  • Esto permitirá que el módulo miniOrange REST API Authentication autentique tu API. Haz clic en el botón Guardar configuración para continuar.

    REST API

Configura la autenticación de API basada en OAuth/Access Token:

  • En este paso, configuraremos OAuth/Access Token como método de autenticación de 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 el botón Guardar configuración.
    • Debajo del botón Guardar configuración selecciona el botón de opción OAuth/Access Token.
    • Ahora haz clic en el botón Generar un nuevo Client ID & Secret.
  • Mantén a mano el Client ID y Secret, ya que se usarán más adelante para autenticar la API de obtención de información de usuario.

    Generar nuevo Client ID

Concede permisos a los roles de Drupal para ver información de usuario:

  • Si lo necesitas, también puedes otorgar a los roles de Drupal no administradores el permiso para ver información de usuario. Puedes hacerlo asignando los roles de Drupal al permiso Ver información de usuario desde la sección de permisos (/admin/people/permissions) de tu sitio Drupal.

    REST API

¡Eso es todo!

Ahora probemos recuperar información de usuario mediante una llamada API usando OAuth/Access Token para la autenticación.

Ejemplos:

  • Primero debemos hacer una llamada API para obtener un token de acceso. Luego usaremos esto para autenticar la API de Drupal y obtener la información de un usuario.
  • El módulo miniOrange API Authentication soporta 2 tipos de grant que puedes utilizar para obtener un token de acceso:

Password Grant:

  • En el grant de tipo Password, podemos obtener el token de acceso realizando una solicitud POST que contenga el nombre de usuario y la contraseña de Drupal junto con el Client ID emitido por el módulo REST API Authentication.

    Solicitud: POST <drupal_base_url>/rest_api/access_token                   

    Cuerpo:

    grant_type  = password

    username   = <nombre_usuario_drupal>

    password   = <contraseña_drupal>

    client_id     = <client_id>

    Solicitud en formato CURL-

    curl --location --request POST '<tu_drupal_base_url>/rest_api/access_token' \

     --header 'Accept: application/json' \

     --header 'Content-Type: application/x-www-form-urlencoded' \

    --data-urlencode 'grant_type=password' \

     --data-urlencode 'client_id= <drupal_client_id>' \

     --data-urlencode 'username=<nombre_usuario_drupal >\

    --data-urlencode 'password=<contraseña_drupal>'

  • También puedes consultar la imagen de la solicitud Postman añadida abajo:

    Postman

Client Credentials grant:

  • En el grant de tipo Client Credentials, podemos obtener el token de acceso realizando una solicitud POST que contenga el Client ID y Client Secret emitidos por el módulo API Authentication junto con el nombre de usuario de Drupal.

    Solicitud: POST <drupal_base_url>/rest_api/access_token

    Cuerpo:

    grant_type      = client_credentials

    client_id          = <client_id>

    client_secret   = <client_secret>

    Username       = <nombre_usuario_drupal>

    Solicitud CURL-

    curl --location --request POST '<drupal_base_url>/rest_api/access_token' \

    --header 'Accept: application/json' \

    --header 'Content-Type: application/x-www-form-urlencoded' \

    --data-urlencode 'grant_type=client_credentials' \

    --data-urlencode 'client_id=<Client_ID>' \

    --data-urlencode 'username=<nombre_usuario_drupal>' \

    --data-urlencode 'client_secret=<Client_secret>'

  • También puedes consultar la imagen de la solicitud Postman para obtener un token de acceso de Drupal usando Client Credentials grant.

    api response

  • Una respuesta exitosa devuelve el Access Token junto con la expiración y el tipo de token (consulta la imagen abajo)

REST API

Respuesta de error:

Error Descripción
INVALID_CREDENTIALS

Obtendrás este error si el nombre de usuario o la contraseña son incorrectos.

Ejemplo:
{
  "status": "error",
  "error": "INVALID_CREDENTIALS",
  "error_description": "Invalid username or password."
}

INVALID_CLIENT_ID

Obtendrás este error si envías un Client ID incorrecto.

Ejemplo:
{
  "status": "error",
  "error": "INVALID_CLIENT_ID",
  "error_description": "Invalid Client ID."
}

INVALID_CLIENT_SECRET

Obtendrás este error si envías un Client Secret incorrecto.

Ejemplo:
{
  "status": "error",
  "error": "INVALID_CLIENT_ID",
  "error_description": "Invalid Client Secret."
}

MISSING_USERNAME

Obtendrás este error si falta algún parámetro en la solicitud.

Ejemplo:
{
  "status": "error",
  "error": "MISSING_USERNAME",
  "error_description": "The username is missing from the request"
}

Artículo de la Documentación de Drupal.