Decodifique el payload JWT sin verificar la firma
Pegue un token y lea lo que dice: en el ejemplo, la cabecera indica el algoritmo HS256 y el contenido trae el nombre John Doe con admin en verdadero. La firma no se comprueba, así que lo que vea es una afirmación, no una prueba. Gratis en su navegador.
- Gratis
- Funciona en su navegador
- Sin registro
- Sus datos no salen de su equipo
Ejecutar — gratis
Devuelve ambas secciones como objetos estructurados para que usted pueda examinar con facilidad claims, identificadores, marcas de tiempo, emisores, destinatarios y metadatos del algoritmo, o enviarlos a otra herramienta. La firma no se verifica deliberadamente: los valores decodificados indican lo que afirma el token, pero no demuestran quién lo creó. Utilice el resultado para depuración, desarrollo, documentación e inspección prudente, nunca como prueba de que un token es auténtico o está autorizado.
Comprenda qué demuestra la decodificación y qué no
No utiliza el tercer segmento para autenticar nada. Esta diferencia es fundamental, porque cualquiera puede construir una cadena con forma de token y claims arbitrarios. Use la decodificación cuando necesite conocer la estructura del token, diagnosticar nombres o valores de claims u obtener una representación legible durante el desarrollo.
Siempre que una decisión de seguridad dependa del token, use una biblioteca de verificación JWT adecuada con una clave expresamente confiable y restricciones de algoritmo, emisor y destinatario.
Envíe un JWT compacto e interprete la respuesta
Pegue o envíe el JWT compacto completo en el campo token. Un token estructuralmente válido tiene exactamente tres segmentos separados por dos puntos, aunque este decodificador solo lea los dos primeros. Entre los campos habituales de la cabecera están typ, que suele identificar el tipo de medio JWT, y alg, que indica el supuesto algoritmo de firma.
Los claims NumericDate como exp, nbf e iat siguen siendo números y no se convierten en fechas, lo que evita imponer cómo debe mostrarlos o compararlos quien llama.
Utilice los claims decodificados con seguridad
La decodificación resulta especialmente útil en la frontera entre sistemas. Un especialista de soporte puede examinar un token de prueba censurado para descubrir si falta un destinatario o un alcance. Mantenga explícito el límite de seguridad en todo flujo: los datos decodificados son entrada no confiable.
No conceda acceso, seleccione un tenant, acepte una identidad ni exponga información privada únicamente porque lo solicite un claim decodificado. Para diagnosticar, prefiera ejemplos sintéticos, caducados o generados localmente. Si una automatización debe procesar tokens reales, envíelos solo por un canal debidamente protegido y, tras decodificarlos, verifíquelos con una configuración confiable.
Preguntas frecuentes
¿Verifica esta herramienta la firma del JWT?
Considere cada campo devuelto como no confiable hasta que otro verificador valide la firma y los claims exigidos.
¿Cuánto cuesta?
La versión para navegador puede ejecutar localmente la misma lógica determinista de decodificación.
¿Por qué debe tener tres segmentos el token?
Esta capacidad rechaza cadenas que no tengan exactamente esa estructura.
¿Puedo decodificar un JWT sin firma?
Un token compacto sigue necesitando tres segmentos, por lo que un token no protegido puede tener vacío el tercero.
¿Está cifrada la información que lleva un JWT?
No. Las dos primeras partes solo están codificadas para viajar de forma compacta, no cifradas ni ocultas, así que cualquiera que tenga el token puede leerlas. Si le basta un token de prueba, evite pegar uno real.
Herramientas relacionadas
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/web/jwt-decode \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.c2lnbmF0dXJl"}'const res = await fetch("https://api.kit.forhosting.com/web/jwt-decode", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.c2lnbmF0dXJl"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/web/jwt-decode",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.c2lnbmF0dXJl"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/web/jwt-decode", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.c2lnbmF0dXJl"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.c2lnbmF0dXJl"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/web/jwt-decode", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.c2lnbmF0dXJl"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "web.jwt_decode",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
timeout_sec | 30 |
max_crawl_pages | 25 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |
Notas técnicas
Este decodificador de JWT separa un JSON Web Token en sus tres segmentos compactos y lee el JSON codificado en base64url de la cabecera y el payload.
Comprenda qué demuestra la decodificación y qué no
Un JWT suele contener una cabecera, un payload y una firma, unidos por puntos. Los dos primeros segmentos son JSON codificado en base64url: su contenido está preparado para un transporte compacto, pero no está cifrado ni oculto. Esta capacidad divide el token proporcionado, decodifica esos dos segmentos como UTF-8, analiza su JSON y devuelve los objetos de cabecera y payload resultantes. Ver un sujeto, rol, emisor, destinatario o valor de caducidad en el payload decodificado no prueba que un sistema de confianza lo haya emitido.
Envíe un JWT compacto e interprete la respuesta
La respuesta contiene un objeto header y un objeto payload. El payload suele incluir sub para el sujeto, iss para el emisor, aud para el destinatario, exp para la caducidad y claims propios de la aplicación. El decodificador no exige ningún claim: conserva los valores JSON presentes. Si el token tiene un número incorrecto de segmentos, base64url defectuoso, UTF-8 o JSON no válidos, o una sección decodificada que no es un objeto, la solicitud devuelve un error de entrada no válida en vez de un resultado parcial.
Utilice los claims decodificados con seguridad
Un desarrollador de API puede comparar los claims emitidos por un proveedor de identidad con los nombres que espera una aplicación. Evite pegar tokens bearer reales en registros, incidencias, chats o documentos compartidos, pues un JWT puede ser una credencial activa aunque su payload parezca inofensivo.
Casos de integración
Depurar claims del proveedor de identidad
Examine la forma de la cabecera y el payload para comparar nombres de claims, destinatarios, alcances e identificadores emitidos con la configuración de una aplicación.
Comprobar tokens de prueba locales
Decodifique tokens de fixture en pruebas o scripts de desarrollo y confirme que contienen los claims personalizados esperados antes de verificar la firma por separado.
Explicar la estructura del token
Convierta un JWT compacto en objetos JSON legibles para documentación técnica, formación o diagnóstico con ejemplos sintéticos y debidamente censurados.
Preguntas técnicas
¿Se convierten las marcas de caducidad en fechas?
No. Valores como exp, nbf e iat se devuelven exactamente como aparecen en el payload, para que quien llama los interprete según sus requisitos.