cadenas y JWT (JSON Web Tokens)

 Vamos a enfocarnos en cadenas y JWT (JSON Web Tokens) para autenticación en APIs.

Un JWT es básicamente una cadena con tres partes separadas por puntos (.):

css
header.payload.signature
  • Header → información del algoritmo y tipo de token (en Base64URL).

  • Payload → datos que quieres enviar (en Base64URL).

  • Signature → hash del header+payload con una clave secreta.


🛠 Tres ejercicios prácticos con JWT en JavaScript


1️⃣ Crear un JWT manualmente

(Sin librerías, solo para entender cómo se forma la cadena)

javascript
// Función para codificar en Base64URL function base64url(source) { let encoded = btoa(JSON.stringify(source)); return encoded.replace(/=+$/, '').replace(/\+/g, '-').replace(/\//g, '_'); } // Crear un JWT básico function crearJWT(header, payload, secret) { let headerBase64 = base64url(header); let payloadBase64 = base64url(payload); let firma = btoa(headerBase64 + "." + payloadBase64 + secret); // Firma simulada return `${headerBase64}.${payloadBase64}.${firma}`; } // Ejemplo let header = { alg: "HS256", typ: "JWT" }; let payload = { usuario: "Saul", rol: "admin" }; let secret = "clave_secreta"; let token = crearJWT(header, payload, secret); console.log("JWT generado:", token);

2️⃣ Decodificar un JWT

(Leer el contenido sin validar la firma)

javascript
function decodificarJWT(token) { let [headerB64, payloadB64] = token.split("."); let header = JSON.parse(atob(headerB64)); let payload = JSON.parse(atob(payloadB64)); return { header, payload }; } // Ejemplo let datos = decodificarJWT(token); console.log("Header:", datos.header); console.log("Payload:", datos.payload);

3️⃣ Verificar un JWT

(Comprobar si la firma es válida con la clave secreta)

javascript
function verificarJWT(token, secret) { let [headerB64, payloadB64, firma] = token.split("."); let firmaEsperada = btoa(headerB64 + "." + payloadB64 + secret); return firma === firmaEsperada; } // Ejemplo console.log("Token válido:", verificarJWT(token, "clave_secreta")); console.log("Token válido con clave incorrecta:", verificarJWT(token, "otra_clave"));

📌 Notas importantes

  • Este ejemplo es educativo y usa btoa() para simular firmas, no es seguro para producción.

  • En un sistema real se usan librerías como jsonwebtoken y funciones criptográficas como HMAC SHA-256.

  • El JWT se manda normalmente en la cabecera HTTP:

    http
    Authorization: Bearer <token>

Si quieres, puedo hacerte un ejemplo real firmando y verificando un JWT con crypto.subtle y SHA-256, que sí funcione como un sistema de API real.
¿Quieres que lo prepare así de seguro?

Comentarios

Entradas más populares de este blog

1-valores duplicados en un arreglo

Pseudocódigo de la Máquina Expendedora

Trabajas en una compañía que ofrece seguros de vida y de gastos