Chuck's Academy

Express JS

Autenticación y Autorización en Express

La autenticación y autorización son dos aspectos fundamentales para garantizar la seguridad de cualquier aplicación web. La autenticación es el proceso de verificar la identidad de un usuario, mientras que la autorización se refiere a los permisos que ese usuario tiene dentro de la aplicación. En este capítulo, aprenderemos a implementar ambos conceptos en Express utilizando diferentes métodos y herramientas.

Autenticación Básica

Para empezar, veamos un ejemplo de cómo implementar una autenticación básica en Express usando sesiones. Utilizaremos el paquete express-session para manejar las sesiones de los usuarios.

Instalación de express-session

Primero, instalemos el paquete necesario:

bash
"Instalamos el paquete express-session con npm install express-session para manejar las sesiones de usuarios."

Luego, configuramos el middleware de sesión en nuestro proyecto.

javascript
"Aquí configuramos express-session con una clave secreta mySecretKey. Usamos resave y saveUninitialized en false para no almacenar sesiones vacías ni guardar sesiones no modificadas. Las cookies no son seguras porque estamos en un entorno de desarrollo, pero en producción debe ser true."

Verificando las Sesiones

A continuación, veremos cómo crear rutas protegidas que solo permitan acceso a usuarios autenticados.

javascript
"En este código, la ruta slash login verifica si el usuario envía las credenciales correctas, en este caso admin y el password uno dos tres cuatro. Si las credenciales son correctas, se almacena un objeto de usuario en la sesión. Luego, la ruta slash dashboard verifica si el usuario está autenticado mirando si existe la propiedad user en req punto session."

Autenticación con JWT (JSON Web Tokens)

Para aplicaciones modernas, es común usar JSON Web Tokens (JWT) para la autenticación, especialmente en APIs. Los JWT permiten que las credenciales de usuario se pasen entre el cliente y el servidor de manera segura y sin necesidad de mantener sesiones en el servidor.

Instalación de jsonwebtoken

Primero, instalamos el paquete necesario para trabajar con JWT:

bash
"Instalamos el paquete jsonwebtoken con npm install jsonwebtoken, que nos permitirá crear y verificar tokens JWT."

Generando y Verificando Tokens

A continuación, veremos cómo generar un token JWT cuando el usuario inicia sesión y cómo verificarlo en rutas protegidas.

javascript
"En la ruta login, verificamos las credenciales y si son correctas, generamos un token JWT con jwt punto sign, usando el nombre de usuario y la clave secreta mySecretKey. El token expira en una hora. En la ruta dashboard, verificamos si hay un token en los encabezados de la solicitud y lo validamos con jwt punto verify. Si el token es válido, devolvemos una bienvenida con el nombre de usuario."

Autorización de Rutas

Además de autenticar a los usuarios, podemos restringir el acceso a ciertas rutas según el rol o permisos del usuario.

javascript
"En este ejemplo, creamos un middleware llamado checkAdmin que verifica el token JWT y comprueba que el usuario sea admin. Si el token es válido y el usuario es admin, el flujo continúa con next. Si no, respondemos con un código de estado cuatro cero tres, Forbidden, o cuatro cero uno, si no hay token."

Buenas Prácticas en Autenticación y Autorización

  1. Almacenar Tokens Seguros: Los tokens JWT deben almacenarse de forma segura en el cliente, preferiblemente en localStorage o sessionStorage.
  2. HTTPS Obligatorio: Siempre usa HTTPS para proteger las credenciales y tokens de ser interceptados.
  3. Expiración de Tokens: Configura una expiración para los tokens JWT y proporciona un mecanismo de renovación si es necesario.
  4. Roles y Permisos: Implementa una lógica clara de roles y permisos para diferentes usuarios en tu aplicación.

Conclusión

En este capítulo, hemos visto cómo implementar autenticación y autorización en Express usando tanto sesiones como JWT. Estos son componentes esenciales para la seguridad de cualquier aplicación web.


Pregúntame lo que sea