Los dominios de primera parte (first party domain) y las sesiones de primera parte (first party session) son conceptos clave para entender cómo funciona la autenticación de SPAs en Laravel Sanctum y cómo se diferencia de la autenticación por tokens de API.
En el contexto de Laravel Sanctum:
¿Qué es un "First-Party Domain" (Dominio de Primera Parte)?
Un "dominio de primera parte" (o "first-party domain") se refiere al escenario en el que tu aplicación frontend (SPA, por ejemplo, React, Vue, Angular) y tu API de Laravel backend comparten el mismo dominio de nivel superior.
Ejemplos de dominios de primera parte:
- Producción:
- Frontend:
app.example.com
- Backend (API):
api.example.com
- Ambos comparten el dominio de nivel superior
example.com
.
- Frontend:
- Desarrollo local:
- Frontend:
localhost:3000
(olocalhost:5173
para Vite, etc.) - Backend (API):
localhost:8000
(o127.0.0.1:8000
conphp artisan serve
) - Ambos comparten el dominio de nivel superior
localhost
.
- Frontend:
Lo crucial es que el navegador los considere parte del mismo "sitio" para fines de seguridad de cookies y CORS.
¿Por qué es importante el "First-Party Domain" en Sanctum?
Porque Laravel Sanctum utiliza esta condición para ofrecer un método de autenticación para SPAs que es similar a la autenticación de sesión tradicional basada en cookies de Laravel, pero adaptado a las necesidades de las SPAs.
Cuando una solicitud HTTP entrante a tu API de Laravel proviene de un dominio que has configurado como "first-party" en tu archivo config/sanctum.php
(a través de la variable de entorno SANCTUM_STATEFUL_DOMAINS
), Sanctum intentará autenticar la solicitud usando las cookies de sesión de Laravel.
Este comportamiento es ideal porque:
- Es familiar: Funciona de manera muy similar a cómo Laravel siempre ha manejado la autenticación web.
- Seguridad: Se beneficia de las protecciones incorporadas de Laravel, como la protección CSRF (Cross-Site Request Forgery) y la protección contra ataques XSS (Cross-Site Scripting) para las credenciales de autenticación.
- Conveniencia: No necesitas manejar manualmente tokens de API en el lado del frontend para la autenticación; las cookies lo hacen por ti después de una solicitud inicial para obtener el token CSRF (
/sanctum/csrf-cookie
).
¿Está relacionado con "First-Party Session"?
Sí, están intrínsecamente relacionados y son la base de la autenticación de SPAs en Sanctum.
Cuando hablamos de "first-party session" en el contexto de Sanctum, nos referimos al mecanismo de autenticación basado en sesiones y cookies de Laravel que se activa específicamente cuando la solicitud proviene de un "first-party domain" configurado.
Laravel Sanctum tiene dos modos principales de autenticación:
- Autenticación por Tokens de API (Stateless): Para aplicaciones móviles, terceros, o SPAs que están en un dominio diferente (cross-origin). Aquí el cliente envía un token de tipo
Bearer
en el encabezadoAuthorization
. Esta es una autenticación sin estado (stateless). - Autenticación de SPA (Basada en Sesión de Primera Parte / Stateful): Para SPAs que residen en un "first-party domain" con respecto a la API. Para estas solicitudes, Sanctum utiliza las sesiones y cookies de Laravel, haciendo que la autenticación sea con estado (stateful).
Cómo funciona la "First-Party Session" con Sanctum:
- Tu SPA hace una solicitud GET a
/sanctum/csrf-cookie
. Laravel devuelve una cookieXSRF-TOKEN
y establece la sesión. - Tu SPA envía credenciales de inicio de sesión (usuario/contraseña) a tu endpoint de login (
/api/login
). El navegador incluye automáticamente la cookieXSRF-TOKEN
y las cookies de sesión (porque es un dominio de primera parte). - Laravel autentica al usuario y, si las credenciales son válidas, la sesión se activa y se crea una cookie de sesión que el navegador guardará y enviará automáticamente con cada solicitud subsiguiente.
- Para todas las solicitudes posteriores a endpoints protegidos por
auth:sanctum
desde esa misma SPA, el navegador enviará la cookie de sesión, y Sanctum la utilizará para autenticar al usuario. No se necesitan tokens explícitos en el encabezadoAuthorization
para estas solicitudes.
En resumen:
- First-Party Domain: El concepto de que tu frontend (SPA) y tu backend (API de Laravel) comparten el mismo dominio de nivel superior.
- First-Party Session: El tipo de autenticación basada en cookies/sesiones que Laravel Sanctum activa cuando detecta que una solicitud proviene de un dominio que ha sido configurado como "first-party".
La interconexión es que el dominio de primera parte es una condición necesaria para que la autenticación de sesión de primera parte funcione en Sanctum.
No hay comentarios:
Publicar un comentario