- 1

Instalación y configuración inicial de NestJS para APIs
06:28 - 2

Instalación del CLI de NestJS y primer proyecto con API
11:29 - 3

Creación de endpoints dinámicos para consultar usuarios en NestJS
20:23 - 4

Operaciones CRUD en APIs REST con Postman
23:37 - 5

Método PUT para actualizar usuarios con ID automático
19:42 - 6

Códigos de estado HTTP y manejo de errores en APIs con NestJS
16:07 - 7

DTOs y validación automática de datos en APIs con NestJS
19:31 - 8

Patrón de servicios e inyección de dependencias en NestJS
25:09 - 9

Configuración de variables de entorno en NestJS
20:44 - 10

Creación y organización de módulos en NestJS para aplicaciones escalables
12:26 quiz de Fundamentos y Primer CRUD
Protección de endpoints con JWT guards en NestJS
Clase 29 de 35 • Curso de Backend con NestJS
Contenido del curso
- 11

Configuración de PostgreSQL con Docker y Docker Compose
16:08 - 12

Configuración de PostgreSQL con TypeORM en aplicaciones NestJS
12:17 - 13

Creación de entidades ORM con decoradores en TypeScript
09:17 - 14

Implementación del Repository Pattern con TypeORM en NestJS
29:55 - 15

Relaciones uno a uno entre usuarios y perfiles en PostgreSQL
17:00 - 16

Actualización de DTOs con mapped types en NestJS para perfil y usuario
38:56 - 17

Generación automática de módulos CRUD con NestJS y AI
25:34 - 18

Relaciones uno a muchos con TypeORM en NestJS
17:56 - 19

Creación de entidad Category con relaciones many-to-many en NestJS
15:28 - 20

Relaciones many-to-many con TypeORM y validación de arrays
17:40 - 21

Reutilización de servicios entre módulos en NestJS
09:04 - 22

Configuración de migraciones de base de datos con TypeORM
23:01 - 23

Migraciones de base de datos sin pérdida de información
20:46 quiz de Base de Datos y Persistencia con TypeORM
- 24

Cómo proteger contraseñas con hashing usando Bcrypt en NestJS
10:15 - 25

Serialización de datos para excluir campos sensibles en APIs
04:13 - 26

Configuración de autenticación con Passport en NestJS
19:16 - 27

Implementación de endpoint de login con Node.js y NestJS
09:09 - 28

Implementación de JSON Web Token para autenticación en NestJS
16:15 - 29

Protección de endpoints con JWT guards en NestJS
11:34 - 30

Automatización de user ID en APIs con JWT
11:48 quiz de Autenticación y Autorización
- 31

Integración del SDK de OpenAI en Node.js para automatizar contenido
28:26 - 32

Documentación automática de APIs con Swagger en NestJS
15:59 - 33

Preparar una API Node.js para producción: seguridad y despliegue
10:46 - 34

Desplegar aplicación Node.js a producción con Railway y PostgreSQL
21:11 - 35

Desarrollo de API REST escalable con NestJS en producción
02:36
Implementar protección de rutas usando JWT es una tarea fundamental en aplicaciones modernas de backend. Aprenderás a utilizar JWT para validar usuarios y gestionar recursos privados, haciendo tu API más segura y robusta. Esta guía está basada en experiencias prácticas con NestJS, incluyendo detalles relevantes sobre guards, headers y flujo de autenticación.
¿Cómo funciona la autenticación de endpoints usando JWT?
La configuración base ya incluye un endpoint para el login con validaciones de usuario y generación de un access token. Sin embargo, el siguiente paso esencial es proteger rutas usando ese access token como medio de autenticación para acceder a recursos sensibles.
Cuando el usuario inicia sesión, se le otorga un token que debe enviarse en cada solicitud protegida. Así, solo con este token el servidor autoriza operaciones como crear posts u obtener entidades privadas.
¿Cómo se implementa la protección con guards y JWT strategy?
- Guards (guardianes) permiten restringir el acceso a rutas de la API.
- Para rutas protegidas, se utiliza el JWT guard en vez del guard predeterminado local.
- Se configura una strategy específica para JWT donde:
- Se extrae el token desde el header
Authorizationusando el método bearer. - El servidor requiere un secreto configurable vía variables de ambiente para validar la firma del token.
- Para mayor seguridad, si falta la variable de ambiente del secreto, se lanza un error notificando que no es posible validar la autenticidad del access token.
Fragmento destacado: Dentro del método validate, se recupera la información contenida en el token. Lo habitual es almacenar el identificador de usuario en el campo sub del payload JWT, permitiendo así identificar al usuario autenticado fácilmente.
¿Cómo se envía el JWT access token desde cliente a servidor?
El token debe enviarse en los headers de la petición HTTP. La estructura correcta es:
- El header debe llamarse
Authorization. - El valor debe ser
Bearer, asegurando un solo espacio tras la palabra Bearer.
Esta estructura es estándar y necesaria tanto en herramientas como Postman, como en aplicaciones web o móviles.
Ejemplo de uso en diferentes contextos:
- En Postman, simplemente selecciona Bearer Token y pega el token generado en el momento del login.
- En cURL, PHP, Python, Dart (Flutter), y otros lenguajes, sigue el mismo patrón: enviar el token como parte del header Authorization.
¿Qué ocurre sin el authorization token o con un token inválido?
Si el access token no se envía o su firma es incorrecta, el servidor responde indicando falta de autorización. De este modo, solo usuarios autenticados pueden realizar acciones sensibles.
Aplicaciones frontend deben almacenar el access token de forma segura, por ejemplo: - En cookies, session storage o local storage para aplicaciones web. - En memoria persistente o almacenamiento seguro para aplicaciones móviles.
¿Cómo decidir qué endpoints proteger con JWT guard?
- Puedes aplicar la protección a endpoints específicos, como creación, modificación o eliminación de posts.
- Si necesitas proteger varios endpoints de un mismo recurso, puedes aplicar el JWT guard a nivel de controller.
- Endpoints públicos, como obtener todos los artículos o uno solo, pueden mantenerse sin autenticación según la lógica del negocio.
Cada decisión dependerá de los requerimientos y políticas de seguridad de la aplicación. ¿Cómo organizas la protección de tus rutas en tus proyectos? ¡Comparte tus experiencias!