¿JWT?
¿Qué son los JWTs?
JSON Web Tokens (JWT) son un estándar abierto (RFC 7519) que define una manera compacta y autocontenida de transmitir información de forma segura entre partes como un objeto JSON. Esta información puede ser verificada y confiable porque está firmada digitalmente. Los JWT se utilizan comúnmente para autenticación y autorización en aplicaciones web.
Formato de un JWT
Un JWT consta de tres partes separadas por puntos (.
): el encabezado (header), el payload y la firma (signature). Cada una de estas partes es una cadena codificada en Base64Url.
Encabezado (Header): El encabezado típicamente consta de dos partes: el tipo de token, que es JWT, y el algoritmo de firma que se utiliza, como HMAC SHA256 o RSA.
Este JSON se codifica en Base64Url para formar la primera parte del JWT.
Payload: El payload contiene las declaraciones (claims). Las claims son declaraciones sobre una entidad (generalmente, el usuario) y datos adicionales. Hay tres tipos de claims:
Registered claims: Claims predefinidos que no son obligatorios pero son recomendados, como
iss
(emisor),exp
(expiración),sub
(sujeto),aud
(audiencia).Public claims: Claims personalizados que se utilizan para compartir información entre partes que se han acordado utilizar estas claims y sus significados.
Private claims: Claims personalizados creados para compartir información entre partes que han acordado utilizar estos claims.
Este JSON se codifica en Base64Url para formar la segunda parte del JWT.
Firma (Signature): Para crear la firma, se toma el encabezado codificado, el payload codificado, una clave secreta y el algoritmo especificado en el encabezado, y se firma. Por ejemplo, si se utiliza HMAC SHA256, la firma se crea de la siguiente manera:
La firma se utiliza para verificar que el mensaje no haya sido alterado y, en el caso de tokens firmados con un par de claves públicas/privadas, también se puede verificar el emisor del JWT.
Ejemplo de un JWT
Un JWT típico puede verse así:
JWT vs JWS vs JWE
JWT (JSON Web Token): Es un estándar que define una manera compacta y autocontenida de transmitir información de forma segura entre partes como un objeto JSON. Puede estar firmado (JWS) o cifrado (JWE).
JWS (JSON Web Signature): Es un objeto JSON que está firmado digitalmente utilizando un algoritmo de firma especificado. Cuando un JWT está firmado, se llama JWS. Este asegura la integridad de los datos y la autenticidad del emisor.
JWE (JSON Web Encryption): Es un objeto JSON que está cifrado. JWE protege la confidencialidad del contenido al cifrar el JWT. Esto asegura que solo las partes autorizadas puedan leer el contenido del token.
Diferencias Clave
JWT: Es un término general que puede referirse a un JWS o un JWE. La especificación del JWT abarca ambos tipos de tokens, aquellos que están firmados (JWS) y aquellos que están cifrados (JWE).
JWS: Se centra en la firma y la verificación de la integridad y la autenticidad del token. La información dentro del token es legible por cualquier persona que posea el token, pero puede ser verificada para asegurar que no ha sido alterada.
JWE: Se centra en la confidencialidad de los datos dentro del token. La información es cifrada y solo puede ser leída por las partes autorizadas que posean la clave de descifrado.
Conclusión
Los JWTs son una herramienta poderosa y flexible para la autenticación y autorización en aplicaciones modernas, permitiendo la transmisión segura de información entre partes. Entender la diferencia entre JWT, JWS y JWE es crucial para implementar sistemas de autenticación y autorización robustos y seguros. Mientras que JWS proporciona integridad y autenticidad, JWE añade una capa adicional de confidencialidad al cifrar los datos transmitidos.
Última actualización
¿Te fue útil?