Protección de Rutas con JWT y Passport en Node.js
Clase 11 de 20 • Curso de Backend con Node.js: Autenticación con Passport.js y JWT
Resumen
¿Cómo se protegen las rutas con JWT?
Para proteger nuestras rutas de una manera más segura, hemos llegado al punto crítico de implementar JWT (JSON Web Tokens) con Passport en nuestro sistema. Este proceso garantiza que solamente los usuarios autenticados tengan acceso a ciertas partes de nuestro backend. A continuación, te guiaré a través de los pasos necesarios para implementar esta estrategia.
¿Qué necesitamos para comenzar?
- Passport JWT: Es una estrategia de autenticación que utiliza JWT para proteger rutas.
- JWT Strategy y Extract JWT: Ambos son fundamentales para ubicar y validar el token en las solicitudes.
Pasos para implementar JWT Strategy
-
Instalación de Passport JWT: Desde la terminal, ejecuta la instalación de la librería Passport JWT. Con este paquete tendrás lo necesario para implementar la estrategia.
npm install passport-jwt
-
Configuración de la estrategia: Crea una nueva estrategia llamada JWT importando
Strategy
yExtractJwt
depassport-jwt
.const { Strategy, ExtractJwt } = require('passport-jwt');
-
Definición de opciones: Configura las opciones necesarias para la estrategia. Define de dónde se extraerá el token (usualmente del header como Bearer token) y especifica el secreto para validar dicho token.
const options = { jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(), secretOrKey: config.jwtSecret // Obtén esto de tu configuración };
-
Creación de la estrategia JWT: Inicializa la estrategia JWT utilizando las opciones anteriores. Passport verificará el token y te proporcionará el payload si es válido.
const jwtStrategy = new Strategy(options, (payload, done) => { // Verificación del token if (isValid(payload)) { return done(null, payload); } return done(null, false); });
-
Integración en el sistema: Una vez configurada la estrategia, asegúrate de importarla y usarla donde necesites proteger rutas.
passport.use(jwtStrategy);
¿Cómo se protege un endpoint específico?
Para proteger un endpoint, como por ejemplo el de creación de categorías, sigue los pasos siguientes:
-
Definir la ruta protegida: Usa la estrategia
jwt
para proteger el endpoint deseado. Aquí se utiliza Passport para verificar la autenticidad del JWT.router.post('/categories', passport.authenticate('jwt', { session: false }), (req, res) => { // Lógica para crear una categoría });
-
Verificación en Insomnia o entorno similar: Asegúrate de enviar el token en los headers de la petición. Por ejemplo, en Insomnia, configura el tipo de autentificación como Bearer token para enviar el JWT.
-
Pruebas y validaciones: Asegúrate de que al enviar un JWT válido, el sistema permite realizar acciones específicas, como crear una categoría. Si el JWT es inválido o está corrupto, el acceso debe ser denegado.
¿Qué es un Bearer Token y cómo se usa?
Un Bearer token es simplemente un tipo de token que se envía en el header Authorization
de una petición HTTP. Este se utiliza para autenticar solicitudes y validar que son realizadas por un usuario legítimo. Importante:
- Debe enviarse en el formato:
Bearer <token>
- Asegúrate de enviar el token correcto sin alteraciones
- La clave
authorization
debe incluirse correctamente en los headers
¿Cuáles son los siguientes pasos?
¡Felicidades! Ya tienes una ruta protegida con JWT. Continúa asegurando el resto de tus rutas. Asegúrate de que no solo las operaciones de creación están protegidas, sino también las de modificación y eliminación. Así, evitarás que usuarios no autorizados realicen acciones críticas en tu sistema.
Aprender y experimentar con seguridad de APIs es sumamente importante. Protege eficazmente tu aplicación y sigue investigando en este fascinante campo de la tecnología. ¡Éxito en tu implementación y sigue adelante con tu desarrollo!