Guía Paso a Paso: Implementación de Autenticación JWT en Laravel y Lumen
Victor Arana Flores
08 Aug 2023
Si deseas mejorar la seguridad y autenticación de tu aplicación Laravel, puedes integrar JWT (JSON Web Tokens) siguiendo estos pasos:
Instalación mediante Composer:
Comienza por obtener la última versión del paquete JWT-Auth utilizando Composer. Ejecuta el siguiente comando en tu terminal:
composer require tymon/jwt-auth
Agregar el Proveedor de Servicios (para Laravel 5.4 o versiones anteriores):
Para integrar JWT-Auth, debes incluir el proveedor de servicios en la configuración de Laravel. Abre el archivo config/app.php y encuentra el array 'providers'. Inserta la siguiente línea:
'providers' => [
...
Tymon\JWTAuth\Providers\LaravelServiceProvider::class,
],
Publicar la Configuración:
Para personalizar la configuración del paquete JWT-Auth, puedes publicar el archivo de configuración. Ejecuta el siguiente comando para publicar el archivo de configuración:
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"
Esta acción creará un archivo config/jwt.php donde podrás configurar varios aspectos del paquete.
Generar una Clave Secreta:
Una clave secreta es esencial para la firma de tokens. Puedes crear una fácilmente utilizando la herramienta de línea de comandos Artisan de Laravel. Ejecuta el siguiente comando:
php artisan jwt:secret
Este comando actualizará automáticamente tu archivo .env con una nueva clave, similar a JWT_SECRET=foobar. Esta clave es fundamental para la encriptación de tokens, y el algoritmo específico utilizado dependerá de la configuración que elijas.
Actualizar el Modelo de Usuario
Ahora debes implementar el contrato Tymon\JWTAuth\Contracts\JWTSubject en tu modelo de usuario (User). Esto requiere la implementación de los métodos getJWTIdentifier() y getJWTCustomClaims().
El siguiente ejemplo te dará una idea de cómo podría verse esto. Por supuesto, debes realizar los cambios necesarios para adaptarlo a tus propias necesidades.
<?php
namespace App;
use Tymon\JWTAuth\Contracts\JWTSubject;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable implements JWTSubject
{
use Notifiable;
// Resto del código omitido por brevedad
public function getJWTIdentifier()
{
return $this->getKey();
}
public function getJWTCustomClaims()
{
return [];
}
}
Configurar el Guardia de Autenticación
Dentro del archivo config/auth.php, necesitas realizar algunos cambios para configurar Laravel para usar el guardia jwt en la autenticación de tu aplicación.
Realiza los siguientes cambios en el archivo:
'defaults' => [
'guard' => 'api',
'passwords' => 'users',
],
...
'guards' => [
'api' => [
'driver' => 'jwt',
'provider' => 'users',
],
],
Aquí le decimos al guardia 'api' que use el controlador 'jwt', y establecemos el guardia 'api' como el predeterminado.
Agregar Rutas Básicas de Autenticación
Añadamos algunas rutas en el archivo routes/api.php de la siguiente manera:
Route::post('auth/login', [AuthController::class, 'login']);
Route::post('auth/logout', [AuthController::class, 'logout']);
Route::post('auth/refresh', [AuthController::class, 'refresh']);
Route::post('auth/me', [AuthController::class, 'me']);
Crear el Controlador de Autenticación
Luego, crea el controlador AuthController ejecutando el comando artisan:
php artisan make:controller AuthController
Luego, agrega lo siguiente:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Routing\Controllers\HasMiddleware;
use Illuminate\Routing\Controllers\Middleware;
class AuthController extends Controller implements HasMiddleware
{
public static function middleware(): array
{
return [
new Middleware('auth:api', except: ['login']),
];
}
public function login()
{
$credentials = request(['email', 'password']);
if (! $token = auth()->attempt($credentials)) {
return response()->json(['error' => 'No autorizado'], 401);
}
return $this->respondWithToken($token);
}
public function me()
{
return response()->json(auth()->user());
}
public function logout()
{
auth()->logout();
return response()->json(['mensaje' => 'Cierre de sesión exitoso']);
}
public function refresh()
{
return $this->respondWithToken(auth()->refresh());
}
protected function respondWithToken($token)
{
return response()->json([
'access_token' => $token,
'token_type' => 'bearer',
'expires_in' => auth()->factory()->getTTL() * 60
]);
}
}
Con estos pasos, podrás autenticar las solicitudes de tu aplicación usando JWT. Este token se puede usar para realizar solicitudes autenticadas a tu aplicación.
Conclusiones:
En esta guía, hemos recorrido paso a paso la implementación de la autenticación JSON Web Token (JWT) en tus aplicaciones Laravel y Lumen. JWT ofrece una solución segura y eficiente para gestionar la autenticación de usuarios, permitiéndote mejorar la seguridad de tus aplicaciones mientras mantienes una experiencia de usuario fluida.
Al implementar JWT en tu aplicación, has logrado los siguientes beneficios clave:
Mayor Seguridad: JWT proporciona un método robusto de autenticación y cifrado, asegurando que solo los usuarios autorizados puedan acceder a recursos y funciones protegidos.
Sencilla Integración: Gracias a las bibliotecas y paquetes disponibles, como tymon/jwt-auth, la implementación de JWT se vuelve accesible incluso para desarrolladores con menos experiencia en seguridad.
Eficiencia en la Autenticación: Al evitar la necesidad de consultas de base de datos constantes para cada solicitud, JWT permite una autenticación más eficiente y reduce la carga en tu aplicación.
Flexibilidad Personalizada: Puedes personalizar las reclamaciones y configuraciones JWT para adaptarse a las necesidades específicas de tu aplicación, ofreciendo un nivel de flexibilidad que se adapta a tus requerimientos.
Recuerda, el uso de JWT no solo garantiza la seguridad de la información sensible, sino que también mejora la experiencia del usuario al agilizar el proceso de autenticación. A medida que te familiarices con la implementación de JWT en tus proyectos, podrás aprovechar su potencial completo para crear aplicaciones web más seguras y eficientes.
En resumen, con esta guía has aprendido cómo implementar la autenticación JWT en Laravel y Lumen, lo que te permitirá construir aplicaciones más seguras, confiables y eficientes. Continúa explorando las posibilidades de JWT y sigue mejorando tus habilidades de desarrollo para brindar soluciones de vanguardia en el mundo en constante evolución de la programación web.
3 comentarios
Inicia sesión para comentar
Comentarios:
-
Yoan Estrada Blanco hace 7 meses
Como podria complementar esto con cokkies httpOnly
-
Pablo Rojas hace 10 meses
me pasa algo exrtaño, si hago todo tal cual esta aca, el login normal por web no funciona, o sea, vuelve contantemente al formulario de login
-
Danilo hace 1 año
No me había fijado del blog. Esta super bien explicado