Autenticación HTTP básica
Last updated
Last updated
El sistema de autenticación HTTP básica proporciona una forma rápida de identificar a los usuarios sin necesidad de crear una página con un formulario de login. Este sistema, cuando se accede a través de la web, automáticamente mostrará una ventana emergente para solicitar los datos de acceso:
Pero es más común su utilización para proteger las rutas de una API. En este caso las credenciales se tendrían que enviar en la cabecera de la petición.
Para proteger una ruta usando el sistema de autenticación básico simplemente tenemos que añadir el filtro o middleware llamado auth.basic
a la ruta o grupo de rutas, de la forma:
Por defecto este filtro utiliza la columna email
de la tabla de usuarios para la validación.
Una vez superada la autenticación básica se crea la sesión del usuario y en cliente se almacenaría una cookie con el identificador de la sesión.
Si no queremos que la sesión se mantenga y que no se almacene una cookie tenemos que utilizar el sistema de autenticación "sin estado". Al usar este sistema se solicitará siempre el usuario y contraseña, sin almacenar las credenciales del usuario. Esta opción se suele utilizar mucho para la implementación de una API.
Laravel no incluye un Middleware por defecto para la autenticación sin estado pero lo podemos crear rápidamente. En primer lugar ejecutamos el comando de Artisan para crear un nuevo middleware:
A continuación editamos la nueva clase creada para que tenga el siguiente contenido:
Básicamente lo que tenemos que añadir es el espacio de nombres use Illuminate\Support\Facades\Auth;
y la línea que realiza la validación dentro de la función handle
. El método onceBasic
lanza la autenticación y en caso de que sea correcta permitirá continuar con la petición, y en otro caso devolverá un error de autenticación.
Por último nos faltaría registrar el middleware para poder utilizarlo. Para esto abrimos el fichero app/Http/Kernel.php
y añadimos la siguiente línea al array de routeMiddleware
:
Como se puede ver le hemos asignado el alias auth.basic.once
, así que ya podemos usarlo para añadir la autenticación HTTP básica sin estado a nuestras rutas:
Si intentamos acceder a una ruta protegida mediante autenticación básica utilizando los comando de cURL que hemos visto obtendremos el siguiente error:
Pero cURL permite también indicar el usuario y contraseña añadiendo el parámetro -u
o también --user
(equivalente):
Si solamente indicamos el usuario (y no el password) se nos solicitará al pulsar ENTER, y además al introducirlo no se verá escrito en la pantalla.