Configurar token de acceso/autenticación basada en OAuth
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.
Video de configuración:
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
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)
- 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.
- 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.
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.
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.
¡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:
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.
- Una respuesta exitosa devuelve el Access Token junto con la expiración y el tipo de token (consulta la imagen abajo)
Respuesta de error:
Error | Descripción |
INVALID_CREDENTIALS |
Obtendrás este error si el nombre de usuario o la contraseña son incorrectos. Ejemplo: |
INVALID_CLIENT_ID |
Obtendrás este error si envías un Client ID incorrecto. Ejemplo: |
INVALID_CLIENT_SECRET |
Obtendrás este error si envías un Client Secret incorrecto. Ejemplo: |
MISSING_USERNAME |
Obtendrás este error si falta algún parámetro en la solicitud. Ejemplo: |
Artículo de la Documentación de Drupal.