Drupal 8: Basic_auth, autorizando acceso a endpoint RESTFul

Cabecera Drupal 8: Basic_auth, autorizando acceso a endpoint RESTFul

Drupal 8: Basic_auth, autorizando acceso a endpoint RESTFul

  • Autor: fjavimartin

  • Fecha de Creación: 10/06/2019

  • Categorías:

    • Drupal,
    • Drupal 8,
    • Rest,
    • Php,
    • Code snippets,
    • Basic authentication

En este artículo configuraremos el módulo basic_auth para autenticar al usuario que está ejecutando una llamada a un endpoint RESTFul en drupal 8.

1. Basic Access Authentication

Basic access authentication es un método que permite a un cliente http suministrar nombre y contraseña en una solicitud. Cada una de estas solicitudes contendrá en su cabecera una entrada con la forma: Authorization: Basic <credentials> donde las credenciales están separadas por ':' y codificadas en base64.

Basic Authentication es un método muy simple que permite forzar la autenticación a recursos sin necesidad de cookies, identificadores de sesión, etc...Usa campos standard en la solicitud HTTP y elimina la necesidad de utilizar handshakes.

Usuario y contraseña están codificados en la cabecera en base64, pero no están encriptados ni nada parecido por lo que para incluir confidencialidad deberemos combinar Basic Authentication con HTTPS.

Un ejemplo muy sencillo de parámetro en una solicitud http sería:

Authorization: Basic QWxhZGRpbjpPcGVuU2VzYW1l

Si utilizáis un decodificador base64 descubriréis fácilmente que el usuario y la contraseña son............Venga a practicar, hombre ya!!!!!!!!

2. Módulo basic_auth

Habilitar el módulo basic_auth en drupal 8 no tiene ningún misterio. Simplemente iremos a la sección 'Extender' y en la sección de 'Servicios Web' encontraremos el módulo 'HTTP Basic Authentication'. Marcaremos la casilla correspondiente y después 'Instalar'.

Si todo ha ido bien en unos segundos tendremos disponible este modo de autenticación en nuestro sitio web.

3. Modificar routing.yml

En anteriores artículos hemos implementado métodos para consultar, crear, eliminar y actualizar entidades en nuestro sitio drupal, pero dejamos 'en blanco' el control sobre los permisos o roles que debía tener el usuario para acceder a estos endpoint. Ahora que ya tenemos implementado basic authentication en nuestro sitio drupal deberemos configurar las distintas entradas que creamos incialmente en el fichero routing.yml para que hagan uso de esta nueva funcionalidad.

Utilizaré como modelo la entrada correspondiente al endpoint que nos devolvía el título de los 10 últimos nodos creados en nuestro sitio y cuyo enlace al artículo encontraréis en la sección de referencias:

drupal_miseries.customrestpost:
  path: '/drupal_miseries/rest/customrestget'
  defaults:
    _controller: '\Drupal\drupal_miseries\Rest\CustomRest::getLatestNodes'
  methods: [GET]
  requirements:
    _access: 'TRUE'

Nada nuevo, dejamos libre el acceso a nuestro endpoint. Ahora modificaremos esta entrada para que los usuarios que accedan a este endpoint tenga que estar, al menos, autenticados en nuestro sitio:

drupal_miseries.customrest:
  path: '/drupal_miseries/rest/customrestget'
  options:
    _auth: [ 'basic_auth' ]
  defaults:
    _controller: '\Drupal\drupal_miseries\Rest\CustomRest::getLatestNodes'
  methods: [GET]
  requirements:
    _role: 'authenticated'

Hemos incluido una opción nueva en la que indicamos que uno de los métodos permitidos para acceder a nuestro endpoint será basic authentication y entre los requisitos especificamos que los usuarios deberán tener el rol ‘authenticated’, que se asigna automáticamente cuando un usuario se valida dentro de drupal.

4. Probando endpoint con basic authentication

Como en anteriores ocasiones, utilizando postman, seleccionamos la casilla Authorization e introducimos el nombre de usuario y contraseña para acceder a nuestro sitio. Una vez hecho esto solamente nos quedará pulsar en Update request para que se actualice la solicitud HTTP y, si todo ha ido bien, nos devolverá un JSON con el título de los 10 últimos nodos.

Si pinchamos en Code veremos que el código de la solicitud se parece mucho al siguiente:

GET /drupal8/drupal_miseries/rest/customrestget HTTP/1.1
Host: mihost
Authorization: Basic YWRtaW46cHZnMzdweWs4Yg==
Cache-Control: no-cache
Postman-Token: ff3a8a4c-33fa-2d82-1373-45b79d0ec710

5. Conclusiones

En anteriores artículos vimos como crear diferentes endpoint RESTFul con los que poder consultar, crear, actualizar y eliminar contenido dentro de nuestro sitio drupal, pero siempre con el acceso abierto a cualquier usuario. En este artículo os he mostrado como utilizar basic authentication para securizar el acceso a estos endpoint.

Basic authentication no es el único método para securizar el acceso a estos endpoint. Drupal también incluye en su core la posibilidad de utilizar cookies para validar usuarios y mediante módulos contribuidos podremos utilizar OAuth, Simple OAuth e Ip.

Cualquier aporte que queráis hacer, ya sabéis, tenéis los comentarios para expresaros libremente, un saludo y como siempre…...Disfrutar!!!!!!!

Referencias

https://www.e-quipos.es/blog/drupal-8-creando-un-recurso-rest-personalizado-con-un-metodo-delete

https://www.e-quipos.es/blog/drupal-8-creando-un-recurso-rest-personalizado-con-un-metodo-patch

https://www.e-quipos.es/blog/drupal-8-creando-un-recurso-rest-personalizado-con-un-metodo-post

https://www.e-quipos.es/blog/drupal-8-creando-un-recurso-rest-personalizado-con-un-m%C3%A9todo-get

https://www.drupal.org/docs/8/core/modules/basic_auth/overview

https://www.drupal.org/node/2076725

https://www.drupal.org/docs/8/api/routing-system/structure-of-routes

https://en.wikipedia.org/wiki/Basic_access_authentication

Todos los Derechos Reservados © 2016

Funciona con Drupal