Skip to main content

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 Artisan install:api se instala Sanctum.
Este comando:
  • 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.
Con esto puedes usar métodos como $user->createToken() o $user->tokens.

Autenticación con API tokens

Flujo de tokens

Emitir un token

Usa createToken(). 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.
En la base de datos se guarda el token con hash SHA-256.

Configurar scopes (abilities)

Puedes asignar abilities (scopes) al token para restringir las operaciones que permite.
Al procesar la petición, comprueba los scopes.

Comprobar scopes con middleware

Registra el alias del middleware en bootstrap/app.php.
Aplica el middleware a las rutas.

Caducidad de los tokens

Por defecto los tokens de Sanctum no expiran. Configura la caducidad en minutos con expiration en config/sanctum.php.
También puedes indicar una caducidad por token.
Con caducidad activada, conviene programar la limpieza de tokens expirados.

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.
Para usar la autenticación SPA, el SPA y la API deben compartir dominio de nivel superior (los subdominios pueden ser distintos). Además, las peticiones deben incluir Accept: application/json y las cabeceras Referer u Origin.

Habilitar el middleware de Sanctum

Activa statefulApi() en bootstrap/app.php.

Configurar los dominios first-party

Indica el dominio del SPA en la opción stateful de config/sanctum.php.

Configuración de CORS

Si tu API se consume desde otro subdominio, hay que configurar CORS.
En config/cors.php pon supports_credentials a true.
También en axios del frontend.
No olvides configurar el dominio de la cookie de sesión.

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

Aplica auth: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 utiliza Sanctum::actingAs() para autenticar a un usuario y asignar abilities.

Resumen

Añade HasApiTokens al modelo User:
  • 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.
Última modificación el 13 de julio de 2026