Métodos de autenticación modernos: Autenticación web
Los métodos de autenticación desempeñan un papel fundamental al establecer la identidad de los usuarios y permitirles acceder a los recursos de manera segura. Entre los diversos enfoques de autenticación, encontramos una serie de técnicas que varían en su complejidad y aplicabilidad. Es por ello que quiero compartirte los distintos métodos de autenticación utilizados en el ámbito de las comunicaciones HTTP, desde los enfoques más simples hasta los más avanzados y versátiles.
Si deseas saber más sobre los métodos de autenticación modernos, no dudes en consultar los artículos anteriores:
Comenzaremos el análisi con Basic Authentication, un método directo que requiere que los clientes envíen sus credenciales de usuario en cada solicitud. Luego, avanzaremos hacia Digest Based Authentication, una evolución de la autenticación básica que aborda sus vulnerabilidades mediante el uso de criptográfia. Más adelante, exploraremos el ampliamente utilizado enfoque de Cookie/Session Based Authentication, que introduce el concepto de estado en la autenticación, mejorando la seguridad y la experiencia del usuario. Continuaremos nuestro artículo hacia la autenticación JWT Token Based, que elimina la necesidad de un estado de sesión, brindando ventajas en entornos de microservicios.
1. Basic Authentication
Al realizar una solicitud, la autenticación del Protocolo de transferencia de hipertexto (HTTP) requiere que el cliente pase un nombre de usuario y una contraseña asociada. Este mecanismo no implica cookies ni sesiones, es la forma más sencilla de imponer restricciones de acceso. Para hacer uso de esto, el cliente debe proporcionar un encabezado de autorización con cada solicitud. Generalmente, el ID de usuario y la contraseña no están encriptadas. Este método es simple de usar e implementar y las API son más rápidas ya que no requieren un cifrado o descifrado complejo.
2. Digest Based Authentication
Esta es una variante más avanzada de la autenticación básica y aborda los fallos de seguridad en la autenticación básica a través de una red HTTP, como el envío de credenciales en texto sin formato. En lugar de tratar con textos codificados en Base64, el servidor ahora brinda un resumen que el cliente puede usar para cifrar las credenciales de inicio de sesión.
3. Cookie/session Based Authentication
La autenticación basada en cookies/sesión es el método de autenticación más utilizado en las aplicaciones online. Aunque una cookie y una sesión no son equivalentes, el cliente o el servidor utilizan una cookie o una sesión para identificarte como un usuario conectado. Un servidor puede enviar un encabezado Set-Cookie en respuesta a una solicitud HTTP. El navegador lo guarda en un contenedor de cookies y la cookie se entrega en el encabezado HTTP de la cookie con cada solicitud al mismo origen. La ventaja de esto es que la contraseña ya no se establece en cada solicitud, lo que reduce la ventana de ataque. Las cookies realizan un seguimiento de si el usuario ha iniciado sesión o no y la validez de una cookie se puede revocar cuando sea necesario. Hay algunas pautas fundamentales a tener en cuenta al usar cookies por motivos de autenticación. Debido a que la cookie es leída por otras aplicaciones, está expuesto a ataques Cross Site Scripting (XSS) y Cross Site Request Forgery (CSRF). Las cookies HTTP-Only deben utilizarse en todo momento. Al configurar las cookies, utiliza siempre el indicador Solo HTTP para reducir el riesgo de ataques XSS. Además, un servidor puede identificar si una cookie ha sido modificada por el cliente utilizando cookies firmadas.
4. JWT Token Based Authentication
La autenticación sin estado es un tipo de autenticación basada en token. Se utiliza un token generado por el servidor para la autenticación en lugar de transmitir credenciales. En una arquitectura de microservicios es una ventaja utilizar la autenticación basada en token, ya que el servidor ya no lleva la sobrecarga de la información de la sesión.
5. SSO/OAuth Based Authentication
La autenticación Single-sign-on SSO es un sistema donde los usuarios solo deben iniciar sesión en una cuenta una vez para obtener acceso a todas las aplicaciones conectadas con este sistema. Es bien conocido el ejemplo de Google, donde puedes iniciar sesión en Gmail y tener acceso a otras aplicaciones mediante el mismo usuario.
La autenticación OAuth2 se basa en tokens y es una variante más compleja de OAuth. Los ejemplos de autenticación OAuth2 incluyen Facebook, Google o Twitter. Este método tiene dos pares de credenciales para la autenticación: credenciales de cliente y tokens de usuario.
Los dos son similares en funcionamiento, sin embargo, la principal diferencia es que OAuth solo brinda acceso específico a una aplicación, mientras que SSO permite el acceso completo a todos los datos. Las ventajas del SSO se centran en la experiencia del usuario, el usuario solo debe recordar un conjunto de contraseñas. La contraseña está en manos de un único proveedor que se encarga de su seguridad. Desafortunadamente, si la sesión se desconecta, todas las aplicaciones que dependen de él se vuelven inaccesibles.
Conclusión
Habrás observado que cada método de autenticación se adapta a diferentes contextos y necesidades. A medida que las tecnologías continúan evolucionando, la elección del método de autenticación adecuado depende de factores como la naturaleza de la aplicación, la experiencia del usuario y los requisitos de seguridad. Al comprender estos métodos, puedes tomar decisiones informadas para garantizar la autenticación y la seguridad de manera eficaz.
Referencia:
· Modern Authentication Methods: A Comprehensive Survey