En 2026, las APIs son la columna vertebral de la web. Protegerlas con JWT asegura que solo los usuarios autorizados accedan a tus datos sensibles.
Solución Rápida (Code Snippet)
Instala la librería con composer require firebase/php-jwt y sigue este flujo básico.
<?php
require 'vendor/autoload.php';
use Firebase\JWT\JWT;
use Firebase\JWT\Key;
$key = "TU_CLAVE_SECRETA_SUPER_LARGA";
// 1. Generar el Token (Login exitoso)
$payload = [
'iss' => 'https://8devmx.com',
'iat' => time(),
'exp' => time() + 3600, // Expira en 1 hora
'uid' => 123
];
$jwt = JWT::encode($payload, $key, 'HS256');
echo json_encode(['token' => $jwt]);
// 2. Validar el Token (Petición protegida)
try {
$authHeader = $_SERVER['HTTP_AUTHORIZATION'] ?? '';
$token = str_replace('Bearer ', '', $authHeader);
$decoded = JWT::decode($token, new Key($key, 'HS256'));
// El usuario está autenticado, puedes usar $decoded->uid
} catch (Exception $e) {
http_response_code(401);
echo "Acceso denegado: " . $e->getMessage();
}
Cómo funciona
- Tres Partes: Un JWT tiene un Header, un Payload (datos) y una Firma. Están separados por puntos.
- Stateless: El servidor no consulta una base de datos de sesiones. Solo verifica que la firma del token coincida usando la clave secreta.
- Expiración (
exp): Es vital incluir un tiempo de vida corto. Si un token es robado, dejará de funcionar automáticamente tras su expiración. - Bearer Token: Es el estándar de la industria enviar el token en la cabecera
Authorization: Bearer <token>.
Seguridad Crítica
- Nunca guardes contraseñas en el payload del JWT. Cualquiera puede decodificarlo (no está encriptado, está firmado).
- Usa una clave secreta extremadamente compleja y guárdala en tus variables de entorno (
.env).
Enlaces Internos
- Implementa JWT en tus microservicios con Laravel Lumen.
- Aprende a manejar errores de autenticación con Try-Catch en PHP.
Preguntas Frecuentes
¿Qué pasa si quiero cerrar la sesión de un usuario?
Con JWT es difícil porque el servidor no controla el token. La solución suele ser una “Blacklist” de tokens o usar tiempos de expiración muy cortos con Refresh Tokens.
¿JWT es seguro?
Sí, siempre que uses HTTPS y una clave secreta fuerte. Sin HTTPS, el token puede ser interceptado fácilmente (Man-in-the-Middle).