Si tengo una SPA monolítica (con Inertia) con mejoras de Javascript (que realiza llamadas AJAX), ¿necesito el servicio de protección de API de Sanctum?
Es una duda muy común cuando se trabaja con Inertia.js y Laravel.
La respuesta corta es: Probablemente no necesites Sanctum para la protección de tus API si tu SPA monolítica está construida con Inertia.js y el Laravel backend, y las llamadas AJAX son para acciones dentro de tu propia aplicación.
Aquí te explico el porqué y las implicaciones:
Inercia y la Autenticación Basada en Sesiones
Inertia.js está diseñado para funcionar de manera muy fluida con la autenticación basada en sesiones de Laravel, que es la forma tradicional en que Laravel maneja la autenticación para aplicaciones web monolíticas.
Cuando usas Inertia:
Manejo de Sesiones y Cookies: Laravel establece una cookie de sesión (
laravel_session
) en el navegador del usuario después de que este inicia sesión.Protección CSRF (Cross-Site Request Forgery): Laravel también utiliza un token CSRF (Cross-Site Request Forgery) que se almacena en una cookie (
XSRF-TOKEN
) y/o se envía como un campo oculto en formularios o como un encabezado HTTP (X-XSRF-TOKEN
). Este token es crucial para proteger tus solicitudes POST, PUT, PATCH y DELETE de ataques CSRF.Manejo Automático de Solicitudes: Inertia, por debajo, se encarga de que cada solicitud que tu frontend de React/Vue/Svelte hace a Laravel (ya sea una navegación de página o una llamada XHR/AJAX) incluya automáticamente la cookie de sesión y el token CSRF.
Esto significa que, para las llamadas AJAX que haces a tus rutas web de Laravel (las que típicamente definirías en web.php
y protegerías con middleware como auth
y web
), la autenticación y la protección CSRF ya están manejadas por el sistema de sesiones y cookies de Laravel. No necesitas tokens de API como los que proporciona Sanctum para estas interacciones.
¿Cuándo SÍ necesitarías Sanctum?
Sanctum entra en juego principalmente en estos escenarios:
SPA Completamente Desacoplada (Backend-as-an-API): Si tu frontend es una SPA de React/Vue/Angular completamente separada que se comunica con tu backend de Laravel únicamente a través de una API RESTful o GraphQL. En este caso, no hay una sesión web tradicional, y Sanctum (con tokens de API o autenticación SPA) proporciona el mecanismo de autenticación.
Aplicaciones Móviles Nativas: Para aplicaciones iOS o Android que consumen tu API de Laravel.
APIs de Terceros: Cuando necesitas exponer una API para que otras aplicaciones o servicios externos la consuman.
Tokens de Acceso Personal: Para usuarios que quieren generar tokens para acceder a sus propios datos (similar a GitHub o Stripe).
Conclusión para tu Caso
Si tu aplicación es una SPA monolítica con Inertia.js y todas tus llamadas AJAX son realizadas por tu propio frontend de Inertia hacia tu propio backend de Laravel, entonces la respuesta es no, no necesitas Sanctum. El sistema de autenticación basada en sesiones de Laravel, junto con la forma en que Inertia maneja las solicitudes, ya proporciona la seguridad necesaria para esas interacciones.
Usar Sanctum en este escenario no solo sería redundante, sino que podría añadir una capa de complejidad innecesaria a tu autenticación, ya que estarías mezclando dos paradigmas de autenticación diferentes (sesiones vs. tokens de API) sin una necesidad clara. Cíñete a la autenticación de sesión de Laravel, que es lo que Inertia está diseñado para complementar.