DevToolKits.app
Historia de Desarrollo

Verificación segura de JWT en el navegador: la perspectiva de un ingeniero de seguridad

Manejo seguro de tokens confidenciales. Por qué utilizamos la librería 'jose' y el procesamiento local para el diseño de nuestra herramienta JWT.

Ilustración de la herramienta de decodificación/verificación de JWT

Antecedentes: Un “miedo indescriptible” a los depuradores en línea

Cuando se trabaja en desarrollo web, especialmente en la depuración de la autenticación, pasamos mucho tiempo mirando JWT (JSON Web Tokens) largos que comienzan con eyJhb.... Probablemente, muchas personas han buscado “JWT Decode” en Google para comprobar rápidamente el contenido de estos tokens.

Sin embargo, cuanto más aprendes sobre seguridad, más te das cuenta de lo aterrador que es esto.
Los JWT a menudo contienen direcciones de correo electrónico de usuarios, ID e incluso información de permisos del sistema interno. Si se trata de un token de producción, utilizar una herramienta en línea desconocida no es muy diferente de “confiar un duplicado de las llaves de tu casa a un total desconocido”.

“Necesitamos un ‘santuario’ de verificación que no solo los estudiantes, sino también los creadores, puedan usar con total tranquilidad”.
El desarrollo de nuestra Herramienta de decodificación/verificación de JWT comenzó a partir de esta “desconfianza saludable hacia las herramientas en línea”.

Compromiso técnico: convertir el navegador en un “entorno de ejecución inexpugnable”

Si solo se trata de decodificar, puedes simplemente devolver el Base64. Pero en lo que insistí fue en realizar una funcionalidad completa, incluyendo la “verificación de firma (Verify)”, de forma totalmente local.

1. Presentación de jose, el guardián de la seguridad moderna

Escribir lógica relacionada con el cifrado por tu cuenta es el tabú supremo para un ingeniero de seguridad.
Por lo tanto, adopté la librería jose, que es la más confiable en los estándares web modernos y aprovecha al máximo la API Web Crypto.

import * as jose from 'jose';

// Verifica la firma íntegramente dentro del navegador, sin enviarla a un servidor
const secretKey = new TextEncoder().encode(secret);
const { payload, protectedHeader } = await jose.jwtVerify(token, secretKey);

Al usar esta librería, configuré un entorno donde puedes juzgar instantáneamente “¿Es este token el verdadero?” sin filtrar ni una sola gota de información fuera de tu PC.

2. Un fallback que no abandona los “problemas sobre el terreno”

Por otro lado, hay escenas en el desarrollo en las que tienes que investigar “tokens que ya están rotos”.
Las librerías estrictas se detendrán con un error de análisis, pero el sentimiento honesto del desarrollador es: “¡Sé que dará error, pero quiero ver al menos un fragmento del contenido!”.

Por eso, independientemente de la verificación legítima, también implementé un fallback de decodificación Base64 que fuerza la apertura del contenido incluso si está algo roto.

// Aceptando cierta corrupción de formato y rescatando el JSON
const base64 = parts[1].replace(/-/g, '+').replace(/_/g, '/');
const json = decodeURIComponent(atob(base64));

“Estrictez que respeta los estándares” y “flexibilidad que se mantiene cerca de los problemas complicados sobre el terreno”. Creo que este equilibrio es la estética de una herramienta.

Tranquilidad llamada “Silencio”

Mientras ejecutas esta herramienta, echa un vistazo a la pestaña de red del navegador.
Incluso si presionas el botón de decodificación o el botón de verificación de firma, no se produce ninguna comunicación.
Este “silencio” es la mayor característica de seguridad de la que nos sentimos orgullosos.

Conclusión

La herramienta JWT fue mi propio desafío de “qué tan familiar podemos hacer la tecnología compleja sin comprometer la seguridad ni un milímetro”.
No podría estar más feliz si, al tratar con tokens altamente confidenciales, de repente recuerdas: “Oh, puedo probarlo allí de forma segura”.

Sé más libre y más seguro. Espero que tu desarrollo de autenticación se vuelva incluso un poco más ligero.

Related Tools

Anuncio

Anuncio