Creación de una API Laravel segura con autenticación JWT ⋆ ALexHost SRL

Pon a prueba tus habilidades en todos nuestros servicios de Hosting y ¡obtén un 15% de descuento!

Utiliza el código al pagar:

Skills
06.12.2024

Creación de una API Laravel segura con autenticación JWT

Cuando se construyen APIs con Laravel, garantizar una autenticación segura es crucial, especialmente cuando se trata de datos de usuario. Los JSON Web Tokens (JWT) ofrecen un método robusto para manejar la autenticación en aplicaciones sin estado, permitiendo la transmisión segura de información de usuario entre las partes. Esta guía le guiará a través del proceso de construcción de una API Laravel segura utilizando la autenticación JWT.

Requisitos previos

  • Conocimientos básicos de PHP y Laravel.
  • Laravel instalado en su máquina (preferiblemente Laravel 9 o más reciente).
  • Composer instalado.
  • MySQL u otra base de datos configurada para tu aplicación.

Paso 1: Crear un nuevo proyecto Laravel

Primero, crea un nuevo proyecto Laravel usando Composer:

composer create-project laravel/laravel laravel-jwt-api

Navega hasta el directorio de tu proyecto:

cd laravel-jwt-api

Paso 2: Instalar el paquete de autenticación JWT

El paquete más utilizado para la autenticación JWT en Laravel es

tymon/jwt-auth
. Instálalo usando Composer:

composer require tymon/jwt-auth

Tras la instalación del paquete, publica la configuración JWT:

php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"

Esto creará un archivo

config/jwt.php
en tu proyecto.

Paso 3: Generar la clave secreta JWT

Generar una clave secreta que JWT utilizará para firmar tokens:

php artisan jwt:secret

Esto añadirá una entrada

JWT_SECRET
a su archivo
.env
, que se utiliza para codificar y decodificar los tokens.

Paso 4: Configurar la autenticación

Para configurar la autenticación JWT, necesita configurar la guardia por defecto para su API. Actualice el archivo

config/auth.
php como se indica a continuación:

'defaults' => [
'guard' => 'api',
'passwords' => 'users',

],‘guards’ => [
api’ => [
‘driver’ => ‘jwt’,
‘provider’ => ‘users’,
],
],

Esto le dice a Laravel que use el driver

jwt
para las peticiones API y autentique contra el proveedor
users
.

Paso 5: Crear el modelo de usuario y la migración

Si aún no has creado un modelo de

usuario
, puedes crearlo junto con su archivo de migración:

php artisan make:model Usuario -m

Abra el archivo de migración generado en

database/migrations/
y añada los campos necesarios, como
nombre
,
email
y
contraseña
:

public function up()
{
Schema::create('usuarios', function (Blueprint $tabla) {
$table->id();
$table->cadena('nombre');
$table->string('email')->único();
$table->string('contraseña');
$table->timestamps();
});
}

Ejecuta la migración para crear la tabla de

usuarios
:

php artisan migrate

Paso 6: Implementar métodos JWT en el modelo de usuario

En el modelo de

Usuario
(app/Models/User.php
), implementa la interfaz
JWTSubject
y los métodos requeridos:

use Tymon\JWTAuth\Contracts\JWTSubject;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable implements JWTSubject
{
función pública getJWTIdentifier()
{
return $this->getKey();
}public function getJWTCustomClaims()
{
return [];
}
}

Paso 7: Crear controladores de autenticación

Cree un controlador para gestionar la autenticación de usuarios:

php artisan make:controller AuthController

En

AuthController.php
, añade métodos para registrar un usuario, iniciar sesión y cerrar sesión:

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Tymon\JWTAuth\Facades\JWTAuth;
class AuthController extends Controller
{
public function registrar(Solicitud $petición)
{
$petición->validar([
‘name’ => ‘required|string|max:255’,
’email’ => ‘required|string|email|max:255|unique:users’,
‘password’ => ‘required|string|min:6|confirmed’,
]); $user = User::create([
‘nombre’ => $solicitud->nombre,
’email’ => $request->email,
‘contraseña’ => Hash::make($solicitud->contraseña),
]);$token = JWTAuth::fromUser($usuario);

return response()->json([‘token’ => $token], 201);
}

public function login(Petición $petición)
{
$credentials = $request->only(’email’, ‘password’);

if (!$token = Auth::attempt($credentials)) {
return response()->json([‘error’ => ‘Credenciales no válidas’], 401);
}

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

función pública logout()
{
Auth::logout();

return response()->json([‘message’ => ‘Successfully logged out’]);
}

public function me()
{
return response()->json(Auth::user());
}
}

Paso 8: Definir rutas API

Añadir rutas para la autenticación en

routes/api.php
:

use App\Http\Controllers\AuthController;

Route::post(‘registrar’,[AuthController::class, ‘registrar’]);
Route::post(‘iniciar sesión’,[AuthController::class, ‘iniciar sesión’]);
Route::post(‘logout’,[AuthController::class, ‘logout’])->middleware(‘auth:api‘);
Route::get(‘me’,[AuthController::class, ‘me’])->middleware(‘auth:api‘);

Estas rutas gestionan el registro de usuarios, el inicio de sesión, el cierre de sesión y la obtención del usuario autenticado.

Paso 9: Proteger las rutas API

Para proteger otras rutas API, puede utilizar el middleware

auth:api
. Por ejemplo, si tiene una ruta de recursos para
entradas
:

Route::middleware('auth:api')->group(function () {
Route::resource('posts', PostController::class);
});

Esto asegura que sólo los usuarios autenticados pueden acceder a estas rutas.

Paso 10: Probar la API

Puede probar su API utilizando herramientas como Postman o cURL.

  • Registre un usuario:
    POST /api/register
    Content-Type: application/json{

    “nombre”: “John Doe”,
    “email”: “john@example.com”,
    “password”: “password”,
    “password_confirmation”: “password”
    }
  • Iniciar sesión:
    POST /api/login
    Content-Type: application/json{

    “email”: “john@example.com”,
    “password”: “password”
    }

    Esto devolverá un token que podrás utilizar para autenticar otras peticiones.

  • Acceder a una ruta protegida:Para acceder a una ruta protegida como
    GET /api/me
    , incluye el token en la cabecera
    Authorization
    :
    Authorization: Bearer

Paso 11: Actualización de tokens JWT (opcional)

Para actualizar un token, puede añadir un método en

AuthController
:

public function refresh()
{
$token = Auth::refresh();
return response()->json(['token' => $token]);
}

Añade la ruta para refrescar:

Route::post('refresh', [AuthController::class, 'refresh'])->middleware('auth:api');

Conclusión

Siguiendo esta guía, has construido una API Laravel segura con autenticación JWT, permitiendo el registro de usuarios, login y acceso a rutas protegidas. JWT te permite mantener un mecanismo de autenticación sin estado, lo que es especialmente útil para escalar APIs. Con esta configuración, puedes personalizar aún más la lógica de autenticación de tu aplicación e integrar características adicionales, como el control de acceso basado en roles y tokens de actualización para sesiones de larga duración.

Pon a prueba tus habilidades en todos nuestros servicios de Hosting y ¡obtén un 15% de descuento!

Utiliza el código al pagar:

Skills