domingo, 15 de junio de 2025

Laravel Sanctum: autenticación con estado (stateful authentication)

¿Qué es "autenticación con estado" ("stateful authentication")?


 La autenticación con estado (o "stateful authentication") es un modelo de autenticación en el que el servidor (backend) mantiene y gestiona la información sobre el estado de la sesión del usuario. Esto significa que el servidor "recuerda" que un usuario está autenticado a lo largo de múltiples solicitudes.

¿Cómo funciona la autenticación con estado?

  1. Inicio de sesión:

    • El usuario envía sus credenciales (ej. nombre de usuario y contraseña) al servidor.
    • El servidor verifica estas credenciales.
    • Si son válidas, el servidor:
      • Crea una sesión para ese usuario.
      • Almacena información de la sesión en alguna parte (memoria del servidor, base de datos, caché como Redis, archivos, etc.). Esta información puede incluir el ID del usuario, sus permisos, la hora de inicio de sesión, etc.
      • Genera un identificador único para esa sesión (conocido como ID de sesión).
      • Envía este ID de sesión al cliente (navegador, aplicación móvil), generalmente en una cookie.
  2. Solicitudes subsiguientes:

    • En cada solicitud posterior que el cliente hace al servidor, el navegador envía automáticamente la cookie que contiene el ID de sesión.
    • El servidor recibe el ID de sesión de la cookie.
    • Utiliza este ID para buscar la información de la sesión almacenada en su propio "estado" (la memoria del servidor, base de datos, etc.).
    • Si encuentra una sesión válida y activa asociada a ese ID, el servidor sabe que el usuario está autenticado y autorizado para realizar la acción.

Características clave de la autenticación con estado:

  • El servidor mantiene el estado: La información sobre si un usuario está logueado y quién es, reside principalmente en el servidor. El cliente solo tiene una "referencia" a ese estado (el ID de sesión).
  • Basada en sesiones/cookies: Es el método tradicional de autenticación en aplicaciones web, donde las cookies se usan para mantener la sesión del usuario.
  • Ventajas:
    • Control del servidor: El servidor tiene control total sobre la sesión. Puede invalidar una sesión en cualquier momento (ej. si el usuario cambia su contraseña, si detecta actividad sospechosa, o si el administrador revoca el acceso).
    • Seguridad: Bien implementada (con medidas como CSRF y protección de sesión), puede ser muy segura.
    • Simplicidad para el desarrollador frontend: Una vez que el navegador obtiene la cookie de sesión, la maneja automáticamente en las solicitudes subsiguientes, lo que simplifica el código del lado del cliente.
  • Desventajas:
    • Escalabilidad: Puede ser un desafío para escalar horizontalmente (añadir más servidores). Si la información de la sesión se almacena en la memoria de un servidor específico, las solicitudes de un mismo usuario siempre deben ir a ese mismo servidor (lo que requiere "sticky sessions" o una base de datos de sesiones compartida). Esto añade complejidad y puede ser un cuello de botella.
    • Sobrecarga del servidor: Cada solicitud requiere que el servidor realice una búsqueda de la sesión para validar la autenticación, lo que consume recursos del servidor.

Ejemplo de autenticación con estado:

La forma tradicional en que funcionan las aplicaciones web con un sistema de login y una "sesión de usuario" activa. Cuando inicias sesión en Facebook o tu banco online, y navegas por diferentes páginas sin volver a introducir tus credenciales, eso es autenticación con estado. Tu navegador tiene una cookie de sesión que el servidor utiliza para recordarte.

Relación con Laravel Sanctum:

Laravel Sanctum ofrece un modo de autenticación con estado específico para SPAs que están en "first-party domains". En este caso, Sanctum simula el comportamiento de una sesión web tradicional utilizando cookies y protección CSRF, permitiendo que tu SPA se autentique con el backend de Laravel de una manera familiar y segura para el navegador.

No hay comentarios: