Express
Tutorial Express: Conceptos de autenticación
Aprende los conceptos clave de autenticación y autorización en Express y descubre las estrategias más usadas para proteger tus aplicaciones web.
Aprende Express y certifícateAutenticación vs Autorización
En el desarrollo de aplicaciones web con Express, es fundamental comprender la diferencia entre autenticación y autorización, dos conceptos que frecuentemente se confunden pero que cumplen roles distintos en la seguridad de nuestras aplicaciones.
La autenticación es el proceso mediante el cual verificamos la identidad de un usuario. Es decir, confirmamos que la persona que intenta acceder a nuestra aplicación es realmente quien dice ser. Este proceso responde a la pregunta: "¿Quién eres?"
Por otro lado, la autorización determina qué acciones puede realizar un usuario autenticado dentro de la aplicación. Una vez que sabemos quién es el usuario, necesitamos decidir qué recursos puede acceder y qué operaciones puede ejecutar. Este proceso responde a la pregunta: "¿Qué puedes hacer?"
Diferencias prácticas en Express
En el contexto de una aplicación Express, estos conceptos se manifiestan de manera muy concreta:
La autenticación ocurre típicamente cuando un usuario proporciona credenciales (como email y contraseña) y nuestro servidor valida estas credenciales contra una base de datos o servicio externo. Si las credenciales son correctas, el servidor genera algún tipo de token o establece una sesión que identifica al usuario en futuras peticiones.
La autorización se ejecuta en cada petición posterior, donde verificamos si el usuario autenticado tiene permisos para acceder al recurso solicitado. Por ejemplo, un usuario autenticado podría tener acceso a su perfil personal, pero no a los datos administrativos de la aplicación.
Flujo típico en aplicaciones Express
El flujo habitual combina ambos procesos de forma secuencial:
- Paso 1: El usuario envía credenciales al endpoint de login
- Paso 2: Express valida las credenciales (autenticación)
- Paso 3: Si son válidas, se genera un token o se crea una sesión
- Paso 4: En peticiones posteriores, Express verifica el token/sesión (autenticación continua)
- Paso 5: Express comprueba los permisos del usuario para el recurso solicitado (autorización)
Implementación mediante middleware
En Express, tanto la autenticación como la autorización se implementan habitualmente mediante middleware. El middleware de autenticación se ejecuta primero para verificar la identidad del usuario, mientras que el middleware de autorización se ejecuta después para validar permisos específicos.
Esta separación permite crear aplicaciones más modulares y mantenibles, donde podemos reutilizar la lógica de autenticación en múltiples rutas, y aplicar diferentes niveles de autorización según las necesidades de cada endpoint.
Casos de uso diferenciados
Para ilustrar mejor la diferencia, consideremos algunos escenarios comunes:
- Solo autenticación: Un área de usuario donde cualquier persona autenticada puede acceder a su dashboard personal
- Autenticación + autorización básica: Un sistema donde usuarios autenticados pueden ver contenido, pero solo algunos pueden editarlo
- Autorización granular: Una aplicación donde diferentes roles (admin, editor, viewer) tienen acceso a distintas funcionalidades
La comprensión clara de esta distinción es esencial para diseñar arquitecturas de seguridad robustas en Express, ya que nos permite implementar controles de acceso precisos y escalables que protejan adecuadamente los recursos de nuestra aplicación.
Estrategias de autenticación
Una vez comprendida la diferencia entre autenticación y autorización, es crucial conocer las diferentes estrategias de autenticación disponibles para implementar en aplicaciones Express. Cada estrategia tiene características específicas que la hacen más adecuada para determinados tipos de aplicaciones y casos de uso.
Autenticación basada en sesiones
La autenticación basada en sesiones es una de las estrategias más tradicionales y ampliamente utilizadas. En este enfoque, el servidor mantiene información sobre el estado de autenticación del usuario mediante sesiones almacenadas en el servidor.
Cuando un usuario se autentica correctamente, el servidor crea una sesión única y almacena un identificador de sesión en una cookie del navegador. En cada petición posterior, el servidor verifica la validez de la sesión consultando su almacén de sesiones interno.
Esta estrategia es especialmente útil para aplicaciones web tradicionales donde los usuarios interactúan principalmente a través del navegador, ya que las cookies se gestionan automáticamente sin intervención del desarrollador frontend.
Autenticación basada en tokens
La autenticación basada en tokens utiliza tokens digitales que contienen información sobre la identidad del usuario. El token más común es el JSON Web Token (JWT), que incluye datos codificados y firmados digitalmente.
A diferencia de las sesiones, los tokens son stateless (sin estado), lo que significa que toda la información necesaria para validar la autenticación está contenida en el propio token. Esto elimina la necesidad de mantener un almacén de sesiones en el servidor.
Los tokens se envían típicamente en el header Authorization
de las peticiones HTTP, utilizando el esquema Bearer
. Esta estrategia es ideal para APIs REST y aplicaciones que necesitan escalabilidad horizontal, ya que cualquier servidor puede validar un token sin consultar un almacén centralizado.
Autenticación OAuth 2.0
OAuth 2.0 es un protocolo de autorización que también proporciona capacidades de autenticación cuando se combina con OpenID Connect. Esta estrategia permite que los usuarios se autentiquen utilizando cuentas de terceros como Google, Facebook, GitHub o Microsoft.
El flujo OAuth implica redirecciones entre la aplicación, el proveedor de identidad y el usuario. Una vez completado el proceso, la aplicación recibe un token de acceso que puede utilizar para obtener información del usuario desde el proveedor.
Esta estrategia es especialmente valiosa para mejorar la experiencia de usuario, ya que elimina la necesidad de crear y recordar nuevas credenciales, y para los desarrolladores, reduce la responsabilidad de gestionar contraseñas de forma segura.
Autenticación mediante API Keys
Las API Keys son tokens estáticos que identifican y autentican aplicaciones o servicios en lugar de usuarios individuales. Se utilizan principalmente para la comunicación máquina a máquina o para controlar el acceso a APIs públicas.
Una API Key se incluye típicamente en los headers de las peticiones HTTP o como parámetro de consulta. Aunque es una estrategia simple de implementar, requiere cuidado especial en su gestión, ya que las claves deben mantenerse seguras y rotarse periódicamente.
Esta estrategia es común en integraciones de servicios y aplicaciones que consumen APIs de terceros, donde se necesita un método simple pero efectivo de identificación.
Autenticación multifactor (MFA)
La autenticación multifactor combina múltiples factores de verificación para aumentar la seguridad. Los factores típicos incluyen algo que el usuario sabe (contraseña), algo que tiene (teléfono móvil) y algo que es (biometría).
En aplicaciones Express, MFA se implementa habitualmente como una capa adicional sobre otras estrategias de autenticación. Por ejemplo, después de validar credenciales tradicionales, se puede requerir un código enviado por SMS o generado por una aplicación autenticadora.
Esta estrategia es esencial para aplicaciones que manejan información sensible o requieren altos niveles de seguridad, como aplicaciones bancarias o sistemas administrativos críticos.
Consideraciones para la elección de estrategia
La selección de la estrategia de autenticación adecuada depende de varios factores:
- Tipo de aplicación: Las aplicaciones web tradicionales se benefician de sesiones, mientras que las SPAs y aplicaciones móviles funcionan mejor con tokens
- Escalabilidad: Los tokens facilitan la escalabilidad horizontal, mientras que las sesiones requieren almacenamiento compartido
- Experiencia de usuario: OAuth mejora la UX al eliminar la gestión de contraseñas, pero añade complejidad técnica
- Requisitos de seguridad: Aplicaciones críticas pueden requerir MFA independientemente de la estrategia base elegida
En Express 5, todas estas estrategias se pueden implementar eficientemente mediante middleware especializado y librerías de terceros que simplifican la integración y gestión de cada enfoque de autenticación.
Otras lecciones de Express
Accede a todas las lecciones de Express y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.
Introducción A Expressjs
Introducción Y Entorno
Instalación De Express
Introducción Y Entorno
Estados Http
Routing
Métodos Delete
Routing
Parámetros Y Query Strings
Routing
Métodos Get
Routing
Ejercicios de programación de Express
Evalúa tus conocimientos de esta lección Conceptos de autenticación con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.