La autenticación basada en tokens es una forma de confirmar la identidad de un usuario o dispositivo. Se encarga de comprobar si la entidad en cuestión posee un token previamente emitido.
Después de leer este artículo podrás:
Contenido relacionado
¿Qué es la autenticación?
¿Qué es OAuth?
¿Qué es SAML?
Autenticación de dos factores
Autenticación mutua
Suscríbete a theNET, el resumen mensual de Cloudflare sobre las ideas más populares de Internet.
Copiar el enlace del artículo
La autenticación basada en tokens es el proceso de verificar la identidad mediante la comprobación de un token. En la gestión de acceso, los servidores utilizan la autenticación por token para comprobar la identidad de un usuario, una API, un ordenador u otro servidor.
Un token es un elemento simbólico que expide una fuente de confianza. Pensemos en cómo los policías llevan consigo una insignia expedida por las autoridades que legitima su autoridad. Las fichas pueden ser físicas (como una llave USB) o digitales (un mensaje generado por ordenador o una firma digital).
La autenticación basada en tokens puede hacer referencia a un par de procesos diferentes:
La autenticación mediante un token físico suele tener lugar durante el proceso de inicio de sesión del usuario. El usuario tiene que demostrar que posee un objeto que nadie más tiene. Puede demostrarlo introduciendo un código mostrado por el objeto, conectando el objeto a un dispositivo mediante USB, conectando el objeto mediante Bluetooth o por varios otros métodos. Al igual que introducir una contraseña demuestra que el usuario posee un conocimiento que nadie más tiene, el uso de un token demuestra que un usuario posee un elemento que solo él tiene.
Se utilizan dos tipos de tokens para este tipo de autenticación: tokens blandos tokens duros.
Un token web es digital, no un objeto físico. Es un mensaje enviado desde un servidor a un cliente y que este almacena temporalmente. El cliente incluye una copia del token en las siguientes solicitudes enviadas al servidor para confirmar el estado de autenticación del cliente.
Mientras que la autenticación con tokens físicos verifica la identidad durante el proceso de inicio de sesión, los tokens web se emiten como resultado de un inicio de sesión con éxito. Mantienen activa la sesión iniciada.
Sin embargo, utilizar tokens web para las sesiones de usuario no siempre es lo mejor. Muchos desarrolladores son partidarios de utilizar cookies en su lugar. Los tokens web se pueden utilizar mejor para la autenticación de puntos finales de la API o para validar una conexión entre servidores, en lugar de entre el servidor y el cliente.
En desarrollo web, los "tokens web" hacen referencia casi siempre a los Tokens web JSON. El Token web JSON (JWT) es un estándar para crear tokens web firmados digitalmente que contienen datos de Notación de objetos de JavaScript (JSON). Un servidor crea un token que demuestra la identidad del cliente y se lo envía a este. JWT utiliza firmas digitales para demostrar que el token es legítimo.
Los JWT incluyen tres componentes:
En ocasiones, los JWT se utilizan para mantener a los usuarios autentificados una vez que han iniciado sesión en una aplicación web. No obstante, las cookies también pueden utilizarse para este fin.
Una cookie es un pequeño archivo de datos que un servidor envía a un cliente. Cuando un usuario se registra en una aplicación web, el servidor genera una cookie y la envía al dispositivo cliente (normalmente el ordenador o el teléfono inteligente del usuario). El dispositivo cliente almacena la cookie en la caché del navegador e incluye una copia de la cookie en futuras solicitudes al servidor, parecido a como se pueden utilizar los JWT. Una vez el usuario cierra la sesión, el navegador elimina la cookie.
Las cookies tienen un tamaño de archivo mucho menor en comparación con los JWT, porque los JWT incluyen encabezados y firmas digitales además de la carga útil. En cambio, la cookie solo contiene la carga útil. Esto las hace mucho más eficientes en términos de rendimiento web y de ancho de banda.
Los JWT no están optimizados para el rendimiento porque incluyen firmas digitales, que garantizan que no se haya manipulado su contenido. Pero si una aplicación web utiliza HTTPS (como debería), una cookie debería tener defensas contra manipulaciones de todos modos. HTTPS encriptará y firmará la cookie junto con todos los demás datos HTTP que se intercambien entre el cliente y el servidor, y los atacantes no deberían poder falsificarla o interceptarla en tránsito, a menos que realicen un ataque en ruta.
Los JWT son más apropiados para las API y las conexiones de servidor a servidor. Estos usos no necesitan escalar tanto: una aplicación web puede tener un millón de usuarios, pero no va a tener un millón de conexiones API. Esto reduce el impacto potencial sobre el rendimiento y el ancho de banda. Sin embargo, otros métodos de autenticación, como el TLS mutuo, a veces son más eficientes para las API. Más información sobre el TLS mutuo.