Qué es Sanctum
Laravel Sanctum es un paquete de autenticación ligero pensado para SPAs (single page applications), apps móviles y APIs sencillas. Puedes emitir y gestionar varios API tokens por usuario sin necesidad de dominar OAuth. Sanctum cubre dos casos de uso:Si tu SPA llama a la API que tú mismo controlas, usa el modo SPA. Si la API la consumen apps móviles o terceros, usa API tokens. Puedes usar uno solo o los dos.
Sanctum frente a Passport
Si necesitas actuar como proveedor OAuth2 hacia otros, elige Passport. Para la mayoría de aplicaciones, Sanctum es suficiente.
Instalación y configuración
Instalación
Con el comando Artisaninstall:api se instala Sanctum.
- Instala el paquete
laravel/sanctum. - Publica la migración de la tabla
personal_access_tokens. - Ejecuta la migración.
Añadir el trait HasApiTokens
Añade el trait HasApiTokens al modelo User.
$user->createToken() o $user->tokens.
Autenticación con API tokens
Flujo de tokens
Emitir un token
UsacreateToken(). La propiedad plainTextToken contiene el valor en texto plano. Ese valor no se guarda en la base de datos, por lo que debes devolvérselo al usuario inmediatamente.
Configurar scopes (abilities)
Puedes asignar abilities (scopes) al token para restringir las operaciones que permite.Comprobar scopes con middleware
Registra el alias del middleware enbootstrap/app.php.
Caducidad de los tokens
Por defecto los tokens de Sanctum no expiran. Configura la caducidad en minutos conexpiration en config/sanctum.php.
Revocar tokens
Autenticación SPA
La autenticación SPA usa cookies de sesión, así que no necesitas emitir ni gestionar tokens. Es ideal para tu propio frontend (Vue, React, Next.js…) que consume tu API.Habilitar el middleware de Sanctum
ActivastatefulApi() en bootstrap/app.php.
Configurar los dominios first-party
Indica el dominio del SPA en la opciónstateful de config/sanctum.php.
Configuración de CORS
Si tu API se consume desde otro subdominio, hay que configurar CORS.config/cors.php pon supports_credentials a true.
Flujo de autenticación desde el SPA
1
Obtener la cookie CSRF
Antes del login, llama a
/sanctum/csrf-cookie para inicializar la protección CSRF.2
Enviar la petición de login
POST al endpoint
/login.3
Enviar peticiones autenticadas
Las peticiones posteriores se autentican automáticamente con la cookie.
Proteger rutas autenticadas
Aplicaauth:sanctum a la ruta. Las peticiones no autenticadas reciben 401 Unauthorized. El mismo middleware sirve para API tokens y SPA.
Ejemplo práctico: API de login que devuelve tokens
Ejemplo de autenticación con API tokens para una app móvil.1
Crear el endpoint de login
2
Crear las rutas autenticadas
3
Consumirlo desde el cliente
Pruebas
En los tests de Sanctum utilizaSanctum::actingAs() para autenticar a un usuario y asignar abilities.
- Pest
- PHPUnit
Resumen
Instalación
Instalación
HasApiTokens al modelo User:API habitual
API habitual
Cuándo usar cada modo
Cuándo usar cada modo
- API tokens: apps móviles, terceros, CLI… clientes sin sesión.
- Autenticación SPA: tu propio frontend Vue/React/Next.js sobre el mismo dominio (o subdominio). Más seguro y sin gestión de tokens.