La importancia de la seguridad ha aumentado a lo largo de los años debido al aumento de los ataques cibernéticos y las filtraciones de datos. Las organizaciones deben tomar precauciones, como implementar medidas de ciberseguridad y utilizar tecnologías de encriptación para sus activos digitales.
La seguridad es un punto esencial de cualquier aplicación web, independientemente del tamaño. Contiene datos que deben protegerse, ya que los usuarios malintencionados pueden acceder a ellos.
Una de las formas de proteger los datos es a través de la autenticación basada en token, que utiliza un token JWT. Pero ¿sabes lo que es? Esto es lo que explicaremos en este artículo. ¡Verificar!
JWT: qué es y cuándo utilizarlo
JSON Web Token es un tipo de token de seguridad que se utiliza en el proceso de autorización. Contiene información codificada que el servidor puede decodificar y pasar al cliente solicitante.
Su propósito es transmitir o almacenar de forma compacta y segura objetos JSON entre diferentes aplicaciones. El JWT se firma digitalmente utilizando una clave secreta con el algoritmo HMAC o un par de claves públicas y privadas RSA o ECDSA.
Este hecho lo convierte en un medio extremadamente seguro para compartir información y autenticar a los usuarios. Su formato está basado en texto y es ampliamente aceptado por muchos lenguajes de programación.
JWT es uno de los componentes principales de JOSE (Json Object Signing and Encryption). Contiene especificaciones como:
- JWE (Json Web Encryption), responsable del cifrado para la firma del token;
- JWA (Json Web Algorithms), en cuanto al algoritmo;
- JWK (Json Web Keys) claves correspondientes para firmar;
- JWS (Json Web Signature), la firma de tokens.
- JWT, elemento JOSE, es el token en sí.
Su uso ocurre en dos escenarios: en el proceso de autorización en aplicaciones o en el intercambio de información. A continuación, detallamos sus formas de uso. ¡Verificar!
Autorización
El escenario más común para usar JSON Web Tokens es autenticar a los usuarios proporcionándoles el token y permitiéndoles acceder a las rutas, servicios y recursos apropiados en su sitio web o servidor.
Intercambio de información
Los JWT se pueden firmar utilizando pares de claves públicas y privadas. Esto proporciona cierto nivel de seguridad de que el remitente es quien dice ser.
Estructuras JWT
Los tokens web JSON constan de tres partes separadas por puntos (.). Estas partes son:
- Header;
- Payload;
- Signature.
Header
El header, o cabecera, se ubica al inicio del token y está compuesto por dos elementos: el alg y el typ. El primero indica qué algoritmo de cifrado se utiliza y el segundo informa el tipo de token.
Sin embargo, no todos los tokens JWT contienen información de tipo de token. La información esencial en este caso es la que indica qué algoritmo de firma se utilizó.
Payload
El Payload, o cuerpo, es donde están contenidas las claims. Las claims son informaciones sobre el usuario y datos adicionales.
El Payload del token JWT está compuesto por información opcional, es decir, información que la aplicación que lo generó quiere informar, con excepción de la subclave, que es obligatoria, ya que es el factor identificador de la entidad a la que pertenece el token se refiere.
Hay 3 tipos de claims en las cargas útiles: claims reservados, públicos y privados. Los claims reservados no son obligatorios, pero se recomiendan atributos que pueden ser un conjunto de información útil e interoperable comúnmente utilizada en los protocolos de seguridad de API. Estos claims predeterminados están estandarizados por el sistema y se pueden clasificar en:
- Json Token Identifier (jti): es la identidad única del token;
- iss: este es el usuario que emitió el token;
- iat: identifica la vida útil del token desde el momento de la emisión;
- nbf: determina la validez del token;
- exp: se refiere al tiempo de vencimiento del token. Es decir, después del período dado, el token ya no se acepta para su procesamiento;
- sub: indica el asunto del token;
- aud: Identifica la audiencia del token, es decir, el consumidor final.
Los claims públicos son los atributos que definen el uso del JWT y la información útil para la aplicación. Los claims privados son aquellos específicamente definidos para compartir información entre aplicaciones.
Es importante señalar que no se debe colocar información sensible en el payload, ya que es posible acceder al contenido de cada segmento de un token JWT. El proceso de visualización de contenidos se realiza a través de una decodificación Base64.
Signature
Este es uno de los elementos más sensibles de JWT ya que es una especie de producto de los otros dos componentes. Su composición se realiza codificando (encoding) el encabezado y el payload, agregados a una palabra clave.
La signatures puede identificar si el mensaje del token JWT no ha sido manipulado en algún momento. La palabra clave secret otorga la generación de otros tokens, siendo únicos para el servidor.
Construyendo un token
Un token no es más que una firma digital, es decir, una clave. De esta manera, es una cadena, una cadena de caracteres que funciona para representar un objeto.
Una firma es una parte sensible a la seguridad de un token destinada a proteger la integridad de la información. Para garantizar esta protección, existe una fórmula estándar que requiere que el token sea un hash Base64 generado a partir de un algoritmo de cifrado, por ejemplo, SHA256 o SHA512, y este hash debe realizarse a través del encabezado y la carga útil del token.
Verificación
Un token seguro es matemáticamente imposible de descifrar sin la clave secreta de la aplicación. Sin embargo, una vez descubierta, cualquier aplicación puede decodificar la firma y verificar su validez.
Esto se logra generando una firma utilizando el encabezado y la carga proporcionada por el cliente y luego comparando esta firma generada con la presente en el token enviado por el cliente. Una vez que las firmas mostradas son idénticas, se otorga acceso en la aplicación.
En la práctica
Por lo tanto, para llegar al resultado final de un token es necesario:
- Dictar un algoritmo (alg) y un tipo (typ) en el encabezado;
- Informar los reclamos, que pueden ser registrados o personalizados, del token;
- Interconectar los tres elementos: encabezado, carga útil y firma.
¿Te gustó nuestro contenido? Así que síganos en las redes sociales para estar al tanto de más información y siga nuestro blog.