Autenticación y Autorización con JWT en Node.js

Clase 11 de 29Curso de Node.js: Autenticación, Microservicios y Redis

Resumen

¿Cómo implementar un middleware de autenticación?

Implementar un middleware de autenticación es esencial para garantizar la seguridad de una aplicación. Este middleware evita que se accedan a funciones sensibles sin los permisos adecuados. Se centra en procesar solicitudes y verificar el acceso antes de permitir el paso a cualquier lógica de la aplicación. Así, se minimiza el riesgo en el caso de un fallo de seguridad.

¿Cómo se crea un archivo para el middleware?

Para comenzar, es útil crear un nuevo archivo de JavaScript donde se escribirá el middleware. Este archivo podría llamarse secure.js y se alojaría en un directorio designado para los archivos de servicio. La función principal del archivo será exportar un middleware que valide las acciones permitidas.

// secure.js

module.exports = function(action) {
  return function middleware(req, res, next) {
    switch (action) {
      case 'edit':
        if (req.user.canEdit) {
          next();
        } else {
          res.status(403).send("No tienes permiso para editar.");
        }
        break;
      default:
        next();
    }
  };
};

¿Cómo definir la función central del middleware?

La función será capaz de manejar diferentes acciones basadas en el input. Utilizando un switch, podemos determinar si un usuario está permitido para realizar una acción específica. Aquí es donde se define la lógica de autenticación.

function secureAction(action) {
  return (req, res, next) => {
    switch(action) {
      case 'edit':
        console.log("Acción de Editar ejecutada");
        break;
      // Otros casos para otras acciones
      default:
        next();
    }
  };
}

¿Qué necesita para manejar el token de identificación?

Para la autenticación basada en tokens, es típico manipular tokens JWT (JSON Web Tokens). Primero se requiere decodificar el token recibido en las solicitudes para verificar su validez.

const jwt = require('jsonwebtoken');

function decodeToken(req) {
  const authorization = req.headers['authorization'] || '';
  const token = authorization.split(' ')[1];
  if (!token) {
    throw new Error('Token no proporcionado');
  }
  try {
    const decoded = jwt.verify(token, 'secret_key');
    req.user = decoded;
    return next();
  } catch (error) {
    res.status(401).send("Token inválido");
  }
}

¿Cómo se configura la variable de entorno secreta?

Al gestionar la seguridad, es crucial configurar variables de entorno que gestionen datos sensibles. El secreto JWT es uno de estos datos y debería configurarse en un archivo de configuración.

// config.js
module.exports = {
  jwtSecret: process.env.JWT_SECRET || 'default_secret'
};

En este punto, se puede utilizar esta configuración para verificar los tokens y proporcionar un entorno seguro en la aplicación.

¿Por qué es importante verificar las autorizaciones?

La verificación de credenciales y autorizaciones es fundamental para evitar accesos no autorizados a recursos críticos. La implementación del middleware y la correcta gestión del token de autenticación son técnicas cruciales para proteger las aplicaciones web. Tener un sistema robusto de autenticación no solo mejora la seguridad, sino que también proporciona confianza a los usuarios.

En la siguiente sección, se continuará explorando cómo manejar correctamente los tokens y utilizar estas configuraciones para asegurar aún más las rutas de la aplicación.