Saltar al contenido principal
(JWT), pronunciado “jot”, es un estándar abierto (RFC 7519) que define una forma compacta y autosuficiente de transmitir información de forma segura entre partes en forma de objeto JSON. En otras palabras, JWT es un estándar, lo que significa que todos los JWT son tokens, pero no todos los tokens son JWT. Debido a su tamaño relativamente pequeño, un JWT se puede enviar a través de una URL, mediante un parámetro POST o en un encabezado HTTP, y se transmite rápidamente. Un JWT contiene toda la información necesaria sobre una entidad para evitar consultar una base de datos más de una vez. Quien recibe un JWT tampoco necesita llamar a un servidor para validar el token.

Beneficios

  • Compactos: Los JWT son pequeños, lo que los convierte en una buena opción para su uso en entornos HTML y HTTP.
JWT codificado en comparación con un token SAML
  • Seguros: Los JWT pueden usar un par de claves pública/privada en forma de certificado X.509 para firmarse. Un JWT también puede firmarse de forma simétrica con un secreto compartido mediante el algoritmo HMAC. Para obtener más información, consulte Algoritmos de firma.
  • Comunes: Los analizadores JSON son compatibles con la mayoría de los lenguajes de programación.

Uso

  • Autenticación: Cuando un usuario inicia sesión correctamente con sus credenciales, se devuelve un token de ID. Según la especificación de OpenID Connect (OIDC), un siempre es un JWT.
  • Autorización: Una vez que el usuario ha iniciado sesión correctamente, una aplicación puede solicitar acceso a rutas, servicios o recursos (por ejemplo, APIs) en nombre de ese usuario. Para ello, la aplicación debe enviar un en cada solicitud, que puede estar en forma de JWT.
  • Intercambio de información: Los JWT son una buena forma de transmitir información de forma segura entre partes porque pueden firmarse, lo que permite verificar que los remitentes son quienes dicen ser. Además, la estructura de un JWT te permite comprobar que el contenido no ha sido manipulado.

Seguridad

La información contenida en el objeto JSON puede verificarse y considerarse confiable porque está firmada digitalmente. Aunque los JWT también pueden cifrarse para proporcionar confidencialidad entre las partes, los JWT emitidos por Auth0 son JSON Web Signatures (JWS), lo que significa que están firmados en lugar de cifrados. Por lo tanto, nos centraremos en los tokens firmados, que permiten verificar la integridad de los claim que contienen, mientras que los tokens cifrados ocultan esos claim a otras partes. En general, los JWT pueden firmarse con un secreto (mediante el algoritmo HMAC) o con un par de claves pública/privada mediante RSA o ECDSA (aunque Auth0 solo admite HMAC y RSA). Cuando los tokens se firman con pares de claves pública/privada, la firma también certifica que solo la parte que posee la clave privada fue quien los firmó. Antes de usar un JWT recibido, debe validarse correctamente mediante su firma. Tenga en cuenta que validar correctamente un token solo significa que la información contenida en él no ha sido modificada por nadie más. Esto no significa que otros no hayan podido ver el contenido, ya que se almacena en texto sin formato. Por este motivo, nunca debe almacenar información confidencial dentro de un JWT y debe tomar otras medidas para evitar que los JWT sean interceptados, como enviarlos únicamente a través de HTTPS, seguir las prácticas recomendadas y usar solo bibliotecas seguras y actualizadas.

Más información