Tokens en APIs: Qué son y cómo usarlos en Laravel - Greetik Soluciones - Consultoría TIC Extremadura
Seguridad Online, PHP, Laravel2025-04-04 10:48:39Greetik Soluciones SL

Tokens en APIs: Qué son y cómo usarlos en Laravel

En el desarrollo moderno de APIs, la autenticación mediante tokens es un estándar para proteger los endpoints y garantizar que solo usuarios autorizados accedan a ciertos recursos. En este artículo te explico qué es un token, para qué sirve y cómo puedes implementarlo fácilmente en Laravel usando Laravel Sanctum.

¿Qué es un Token?

Un token es una cadena generada por el servidor que representa a un usuario autenticado. En lugar de enviar el usuario y la contraseña en cada petición, se utiliza este token para verificar la identidad del usuario.

Un token es como una llave digital. Una vez que te autenticas, el servidor te entrega esta llave para que puedas acceder a recursos protegidos sin tener que volver a introducir tus credenciales.

¿Cómo funciona el flujo?

  1. El usuario inicia sesión con su email y contraseña.
  2. El servidor valida las credenciales y genera un token.
  3. El token se devuelve al cliente (por ejemplo, una aplicación web o móvil).
  4. En cada petición futura, el cliente envía ese token.
  5. La API valida el token y permite (o deniega) el acceso.

Implementación en Laravel con Sanctum

Laravel Sanctum es una solución sencilla y segura para autenticación de APIs usando tokens. Aquí tienes una guía paso a paso para implementarlo.

1. Instalar Laravel Sanctum

composer require laravel/sanctum
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
php artisan migrate

En tu modelo User.php, agrega el trait HasApiTokens:

use Laravel\Sanctum\HasApiTokens;

class User extends Authenticatable
{
    use HasApiTokens, Notifiable;
}

Configura el archivo config/auth.php para que use Sanctum como guard:

'guards' => [
    'api' => [
        'driver' => 'sanctum',
        'provider' => 'users',
    ],
],

2. Crear la ruta de login

Define una ruta que permita iniciar sesión y genere el token:

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

Route::post('/login', function (Request $request) {
    $credentials = $request->only('email', 'password');

    if (!Auth::attempt($credentials)) {
        return response()->json(['message' => 'Unauthorized'], 401);
    }

    $user = Auth::user();
    $token = $user->createToken('api-token')->plainTextToken;

    return response()->json(['token' => $token]);
});

3. Proteger rutas con middleware

Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
    return $request->user();
});

4. Enviar el token desde el cliente

En cada petición a la API, el cliente debe incluir el token en los headers:

Authorization: Bearer tu_token_aqui

Esto se puede hacer fácilmente con herramientas como Axios, Postman o fetch en JavaScript.

Logout

Puedes definir una ruta para revocar el token actual:

Route::post('/logout', function (Request $request) {
    $request->user()->currentAccessToken()->delete();
    return response()->json(['message' => 'Token revoked']);
});

Ventajas de usar tokens

  • Permiten autenticación sin necesidad de sesiones.
  • Funcionan bien en arquitecturas sin estado (stateless).
  • Son ideales para SPAs (Single Page Applications) y apps móviles.
  • Se integran fácilmente con sistemas frontend modernos.

¿Sanctum o Passport?

  • Laravel Sanctum es ideal para la mayoría de los proyectos que no requieren OAuth2.
  • Laravel Passport es más complejo y orientado a aplicaciones que necesitan autorización entre múltiples servicios o acceso de terceros.

Conclusión

La autenticación mediante tokens es una herramienta poderosa para proteger APIs y facilitar el acceso seguro desde cualquier tipo de cliente. Laravel Sanctum ofrece una solución rápida, segura y fácil de implementar para la mayoría de los casos de uso. Con esta guía puedes implementar tu propio sistema de autenticación con tokens y comenzar a construir aplicaciones robustas y seguras.