Skip to content
IRC-CodingIRC-Coding
JWTJSON Web TokenSeguridad de TokenAutenticación de APIsClaimsSignature

JWT Token: estructura, seguridad y uso en APIs

Domina JWT: estructura con Header, Payload y Signature, claims, riesgos de seguridad y mejores prácticas para APIs.

S

schutzgeist

6 min read
JWT Token: estructura, seguridad y uso en APIs

Token JWT: estructura y seguridad

Los JWT son tokens compactos y autosuficientes que transportan identidad y permisos, pero solo resultan seguros si se firman y validan correctamente.

Descripción general

JWT significa JSON Web Token y es un formato ampliamente utilizado para transmitir claims entre dos partes. Un JWT consta de tres partes: encabezado, carga útil y firma, separadas por puntos y codificadas en Base64Url. El encabezado contiene metadatos como el algoritmo y el tipo de token, la carga útil contiene claims como tiempo de expiración, emisor e ID de usuario, y la firma garantiza la integridad y autenticidad. Los JWT se usan frecuentemente para autenticación de API y autorización, pero presentan riesgos de seguridad si se implementan incorrectamente. Las reglas clave son: vigencia corta, algoritmos fuertes, validación correcta del emisor y audiencia, uso de HTTPS y nunca almacenar datos sensibles en la carga útil, ya que solo está codificada, no encriptada.

Componentes principales

Encabezado

El encabezado típicamente contiene dos claims: alg para el algoritmo utilizado y typ para el tipo de token. Está codificado en Base64Url. El algoritmo debe ser un procedimiento asimétrico como RS256 o un procedimiento simétrico fuerte como HS256 con un secreto largo. El algoritmo none nunca debe ser aceptado.

Carga útil

La carga útil contiene los claims. Los claims estándar son sub para sujeto, iss para emisor, aud para audiencia, exp para tiempo de expiración, iat para tiempo de emisión, nbf para no antes de, y jti para ID de JWT. Se pueden añadir claims específicos de la aplicación como roles o permisos. La carga útil también está codificada en Base64Url y es legible para cualquiera que posea el token.

Firma

La firma se crea combinando encabezado y carga útil, firmándolos con el algoritmo elegido y la clave. Garantiza que el token no ha sido alterado. El receptor verifica la firma usando la clave pública o simétrica del emisor.

Codificación Base64Url

Base64Url es una variante segura para URL de la codificación Base64. Reemplaza el símbolo más y la barra diagonal por otros caracteres y elimina el relleno. Permite la representación compacta de datos JSON en tokens que pueden transmitirse en URLs y encabezados.

Algoritmos de firma

RS256 utiliza RSA con SHA-256 y un par de claves privada y pública. El emisor firma con la clave privada, el receptor verifica con la clave pública. HS256 utiliza un secreto compartido. Los procedimientos asimétricos son más adecuados para sistemas distribuidos.

Claims y tiempo de expiración

Los claims son los datos centrales en un JWT. exp define el tiempo de expiración y es especialmente importante para limitar la vida útil de un token. Una vigencia corta reduce el riesgo si se roba un token. iat y nbf ayudan a restringir aún más el período de validez.

Validación de token

Un servidor de recursos debe verificar lo siguiente al recibir un JWT: firma, tiempo de expiración, emisor, audiencia, algoritmo y claims necesarios. Las verificaciones omitidas o incorrectas pueden llevar a acceso no autorizado.

Transporte de token

Los JWT se transmiten principalmente en el encabezado Authorization como token Bearer. El encabezado se ve así: Authorization: Bearer eyJhbGciOiJIUzI1NiIs… . La transmisión siempre debe hacerse por HTTPS para evitar el robo de tokens.

Riesgos de seguridad

Los riesgos conocidos incluyen confusión de algoritmo, donde los atacantes cambian el algoritmo a none, claves débiles con HS256, vigencia larga, falta de verificación de audiencia y almacenar datos sensibles en la carga útil. Además, los tokens robados pueden ser utilizados mientras sean válidos, por lo que la vida útil corta es importante.

JWK y JWKS

JWK significa JSON Web Key, JWKS significa JSON Web Key Set. JWKS es una colección de claves públicas que un servidor de recursos utiliza para validar JWT. El servidor de autorización generalmente publica JWKS en una URL conocida, permitiendo que las claves se intercambien automáticamente.

Ejemplo práctico

Después de una autenticación exitosa, un cliente API recibe un token JWT de acceso. El token consta de tres partes codificadas en Base64Url.

Encabezado decodificado:

{
  "alg": "RS256",
  "typ": "JWT"
}

Carga útil decodificada:

{
  "sub": "user-98765",
  "iss": "https://auth.example.com",
  "aud": "https://api.example.com",
  "exp": 1751300000,
  "iat": 1751296400,
  "scope": "read:orders write:orders"
}

El token completo se transmite en el encabezado Authorization:

GET /api/v1/orders
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...

El servidor de recursos verifica la firma con la clave pública, valida exp, iss, aud y scope, y luego permite el acceso. Si el token ha expirado o la firma es inválida, el servidor responde con 401 Unauthorized.

Preguntas frecuentes: Token JWT

1. ¿Qué es un JWT?

JWT significa JSON Web Token. Es un formato de token compacto que consta de encabezado, carga útil y firma, y transporta claims para autenticación y autorización.

2. ¿Cómo está estructurado un JWT?

Un JWT consta de encabezado, carga útil y firma separados por puntos. Las tres partes están codificadas en Base64Url.

3. ¿Qué son los claims?

Los claims son la información contenida en la carga útil. Los claims estándar importantes son sub, iss, aud, exp, iat y nbf. Se pueden definir claims adicionales específicos de la aplicación.

4. ¿Está encriptada la carga útil de un JWT?

No, la carga útil solo está codificada en Base64Url y es legible para cualquiera que posea el token. Los JWT no deben contener datos sensibles a menos que estén encriptados como JWE.

5. ¿Qué es la firma de un JWT?

La firma protege el encabezado y la carga útil con un algoritmo criptográfico y una clave. Garantiza que el token no ha sido modificado desde su emisión.

6. ¿Cuál es la diferencia entre RS256 y HS256?

RS256 es un procedimiento asimétrico con clave privada y pública. HS256 es un procedimiento simétrico con un secreto compartido. RS256 es más adecuado para APIs distribuidas.

7. ¿Qué significa el algoritmo none?

El algoritmo none significa que el token no está firmado. Los servidores nunca deben aceptar tales tokens porque se pueden manipular fácilmente.

8. ¿Qué es confusión de algoritmo?

La confusión de algoritmo es un ataque en el que un atacante cambia el algoritmo en el encabezado y utiliza la clave pública como secreto simétrico para firmar un token falso. Los servidores deben validar el algoritmo rigurosamente.

9. ¿Qué es JWKS?

JWKS significa JSON Web Key Set. Es una colección de claves públicas que utiliza un servidor de recursos para validar JWT. Las claves se pueden obtener automáticamente desde una URL.

10. ¿Por qué debe ser corta la vida útil de un JWT?

La vigencia corta reduce el riesgo si se roba un token. Un atacante solo puede usar un token robado mientras sea válido. Después necesita un nuevo token.

11. ¿Qué es un token Bearer?

Un token Bearer es un token que se transmite en el encabezado Authorization con Bearer. Quien posea el token se considera autorizado. Los tokens Bearer deben protegerse por lo tanto.

12. ¿Cómo se valida un JWT?

Un JWT se verifica en cuanto a firma, tiempo de expiración, emisor, audiencia, algoritmo y claims requeridos. La validación debe realizarse en el servidor e incluir todas las verificaciones estándar.

13. ¿Qué es un token de refresco?

Un token de refresco es un token de larga duración con el que un cliente puede solicitar un nuevo token JWT de acceso. Los tokens de refresco deben estar especialmente protegidos y ser revocables.

14. ¿Se deben almacenar JWT en el navegador?

Los tokens de acceso en el navegador deben tener corta vigencia y no guardarse en almacenamiento local durante mucho tiempo. Son más adecuadas las cookies seguras de httpOnly o tokens almacenables con vida útil muy corta.

15. ¿Cuáles son los errores típicos de seguridad en JWT?

Los errores típicos son aceptar el algoritmo none, claves débiles, vigencia larga, falta de verificación de audiencia e emisor, almacenar datos sensibles en la carga útil y transmisión sin encriptar.

Continúa en la ruta de aprendizaje de API

El siguiente artículo en la ruta de aprendizaje de API trata sobre Autenticación y autorización en API: fundamentos, diferencias y procedimientos — las diferencias entre autenticación y autorización, así como los procedimientos más importantes.

Fuentes

  1. https://datatracker.ietf.org/doc/html/rfc7519
  2. https://datatracker.ietf.org/doc/html/rfc7517
  3. https://datatracker.ietf.org/doc/html/rfc7518

Recomendaciones de libros sobre seguridad en API

Si deseas profundizar en JWT, seguridad de tokens y seguridad en API, te recomendamos los siguientes libros:

Keine Bücher für Kategorie "security" gefunden.

Volver al blog
Share:

Nächster Artikel in Desarrollo de APIs

Weiterlesen
OAuth2 y OpenID Connect para APIs seguras

Entradas relacionadas