JSON Web Tokens 2
Implementación de JWT en Slim
🛠️ Implementación de JWT en Slim
Para trabajar con JWT en PHP, solemos utilizar la biblioteca firebase/php-jwt. La gestión se realiza principalmente a través de dos procesos: creación (encode) y validación (decode).
1. Creación del Token (Encode)
Se utiliza el método estático encode de la clase Firebase\JWT\JWT. Antes de crearlo, preparamos los datos (Payload).
use Firebase\JWT\JWT;
// 1. Obtener datos del usuario
$datos = $request->getParsedBody();
$ahora = time();
// 2. Definir el Payload
$payload = array(
"iat" => $ahora, // Fecha de creación
"exp" => $ahora + 3600, // Expiración (1 hora)
"data" => [ // Datos personalizados
"id" => 1,
"nombre" => "Miguel"
]
);
// 3. Generar el Token
$token = JWT::encode($payload, "miClaveSecreta", "HS256");2. Validación del Token (Decode)
Para verificar si un token es válido y obtener su contenido, usamos el método decode.
try {
$decoded = JWT::decode($token, new Key("miClaveSecreta", "HS256"));
// Si llegamos aquí, el token es válido
} catch (Exception $e) {
// El token es inválido, expiró o la firma no coincide
}🎡 Analogía: La pulsera del Lollapalooza
Para entenderlo mejor, piensa en el flujo de acceso a un festival:
- Entrada (Credenciales): Presentas tu DNI y tu entrada comprada (Usuario y Contraseña).
- Entrega de Pulsera (JWT): Una vez validada tu entrada, el personal te pone una pulsera oficial con un chip. Tú ya no necesitas mostrar tu DNI en cada escenario.
- Acceso a Escenarios (Peticiones con Token): Al querer entrar a un sector VIP, el guardia escanea tu pulsera. Él no sabe quién eres, pero el escáner le dice que la pulsera es auténtica (fue creada por ellos) y que no ha expirado.
[!TIP] El JWT permite que el servidor identifique al usuario de forma segura sin tener que consultar la base de datos en cada pequeña interacción.
JSON Web Tokens 1
JWT es un estándar abierto que define un formato compacto y seguro para transmitir información entre partes como un objeto JSON, firmado digitalmente.
Introducción y sintaxis
PHP es un lenguaje de código abierto muy popular en el ámbito del desarrollo web el cual se puede incrustar fácilmente en código HTML.