30-Usando JSON Web Tokens en PHP con php-jwt

  https://www.youtube.com/watch?v=kQQbk5dFLM0

JSON Web Tokens (JWT): Una forma segura de transmitir información

Hoy quisiera hablar de un tema diferente: los JSON Web Tokens o JWT. Es un estándar de internet que define una forma segura de transmitir información entre clientes, servidores o diferentes sistemas, asegurando que se pueda verificar la autenticidad y que no sea modificable durante la transmisión.

¿Qué es un JWT?

La información se transmite en forma de un token compuesto por tres cadenas alfanuméricas separadas por puntos. Está en formato JSON, lo que facilita su procesamiento y lectura en diferentes sistemas y lenguajes de programación.

Ejemplo práctico con PHP

Vamos a ver un ejemplo usando PHP 8 y la librería firebase/php-jwt:

php
<?php
require_once 'vendor/autoload.php';

use Firebase\JWT\JWT;
use Firebase\JWT\Key;

// Clave secreta para firmar el token
$secretKey = 'mi_clave_super_secreta';

// Datos que queremos incluir en el token (payload)
$payload = [
    'iss' => 'mi_servidor.com',    // Emisor del token
    'aud' => 'mi_cliente.com',     // Audiencia del token
    'iat' => time(),               // Tiempo de emisión
    'exp' => time() + 3600,        // Tiempo de expiración (1 hora)
    'data' => [                    // Datos personalizados
        'user_id' => 123,
        'username' => 'juanperez'
    ]
];

try {
    // Generar el token
    $jwt = JWT::encode($payload, $secretKey, 'HS256');
    
    echo "Token generado: " . $jwt . "\n\n";
    
    // Decodificar y verificar el token
    $decoded = JWT::decode($jwt, new Key($secretKey, 'HS256'));
    
    echo "Token verificado correctamente:\n";
    print_r($decoded);
    
} catch (Exception $e) {
    echo "Error: " . $e->getMessage();
}
?>

¿Para qué se usan los JWT?

Los JWT se utilizan normalmente en aplicaciones web y móviles para:

  • Autenticar usuarios

  • Proteger la privacidad de la información transmitida

  • Evitar estar enviando usuarios y claves constantemente

Flujo típico de JWT:

  1. El servidor crea un token, lo firma y lo envía al cliente

  2. El cliente envía sus solicitudes incluyendo el token

  3. El servidor verifica la autenticidad del token

  4. Si el token es válido, se aceptan los datos del cliente

Estructura de un JWT

Un token JWT tiene tres partes:

  1. Header: Especifica el algoritmo de encriptación

  2. Payload: Contiene la información (claims)

  3. Signature: Verifica que el token no ha sido alterado

Consideraciones de seguridad

  • No incluir información sensible en el payload ya que es visible

  • Usar claves seguras y almacenarlas de forma segura

  • Implementar tiempos de expiración adecuados

  • Validar siempre la firma del token

Los JWT son una solución eficiente y estandarizada para la autenticación y transmisión segura de información en aplicaciones modernas.

Comentarios

Entradas más populares de este blog

1-Autenticación JWT en PHP: Explicación y Ejemplo

8-JWT en 10 minutos - ¿Qué es JWT? ¿Para que sirve? ¿Cuando usarlo? ¿Cómo se usa?

2-JSON Web Tokens