Autenticación y Seguridad
Sistema completo de autenticación y autorización con múltiples capas de protección que garantizan la seguridad de todos los endpoints de la plataforma.
Protección Multicapa
Este módulo implementa un sistema de seguridad en capas donde cada request es validado por múltiples guards antes de llegar al controlador. Esto garantiza que solo usuarios autenticados, verificados y autorizados puedan acceder a recursos sensibles.
Guards Disponibles
JWT Auth Guard
Guard principal de autenticación que maneja todo el flujo de validación de tokens:
- Verificación JWT – Valida la firma y vigencia del token
- Sesiones en Redis – Verifica que la sesión esté activa y no haya sido revocada
- Integración KYC – Valida automáticamente el estado de verificación del usuario
- Sistema PIN – Requiere sesión PIN aprobada para operaciones sensibles
- Auto-migración – Migra automáticamente usuarios sin configuración PIN
Guard Todo-en-Uno
Al aplicar JwtAuthGuard en un endpoint, automáticamente obtienes validación de JWT + KYC + PIN sin necesidad de configuración adicional. Este guard está diseñado para ser el guard principal en la mayoría de endpoints protegidos.
PIN Security System
Sistema de autenticación de segundo factor con sesiones aprobadas:
Características Principales
- PINs de 6 dígitos – Formato numérico fácil de recordar pero seguro
- Hash bcrypt – Almacenamiento seguro con salt automático
- Sesiones aprobadas – Sesiones temporales que persisten en Redis
- Timeouts configurables – Duración personalizable de sesiones PIN
- Protección anti-brute-force – Máximo 5 intentos cada 15 minutos
Componentes del Sistema
PIN Security Service – Servicio principal que gestiona:
- Configuración inicial de PIN
- Verificación de PIN con intentos fallidos
- Creación de sesiones aprobadas
- Actualización de PIN existente
- Revocación de sesiones
PIN Guard – Guard específico que:
- Valida existencia de sesión PIN aprobada
- Verifica que la sesión no haya expirado
- Integra con JWT para validación completa
Tracking de Sesiones – Sistema de monitoreo que:
- Rastrea sesiones activas por usuario
- Permite revocación individual o masiva
- Almacena metadata de dispositivos
Flujo de Autenticación PIN
El flujo típico es:
- Usuario se autentica con JWT (email/password)
- Para operaciones sensibles, se solicita PIN
- Al verificar PIN correctamente, se crea una sesión aprobada
- La sesión aprobada permite acceso temporal sin solicitar PIN nuevamente
- La sesión expira después del timeout configurado
Device Authentication
Control de acceso basado en dispositivos vinculados:
- Device Auth Guard – Valida que el dispositivo esté vinculado a la cuenta
- Device Header Guard – Verifica headers de dispositivo requeridos
- Linked Device Schema – Almacena información de dispositivos autorizados
- Vinculación de dispositivos – Proceso de autorización de nuevos dispositivos
Headers Requeridos
Los guards de dispositivo validan la presencia de:
device-id– Identificador único del dispositivodevice-name– Nombre descriptivo del dispositivodevice-type– Tipo de dispositivo (móvil, web, desktop)
Guards Adicionales
KYC Guard
Valida el estado de verificación Know Your Customer:
- Verifica que el usuario haya completado KYC
- Bloquea acceso a funcionalidades premium sin verificación
- Integrado automáticamente en
JwtAuthGuard
Roles Guard
Control de acceso basado en roles:
- Valida roles específicos del usuario
- Soporta múltiples roles por usuario
- Permite configuración granular por endpoint
Authenticated Guard
Guard simple de sesión:
- Verifica que exista una sesión activa
- Usado para endpoints que no requieren JWT completo
- Compatible con autenticación de sesión tradicional
JWT Module
Módulo compartido de JSON Web Tokens que proporciona:
Funcionalidades
- Generación de tokens – Crea JWTs con claims personalizados
- Validación de tokens – Verifica firma, vigencia y claims
- Refresh tokens – Sistema de renovación de tokens
- Revocación – Invalidación de tokens comprometidos
- Claims personalizados – Soporte para metadata adicional
Integración con Redis
El módulo JWT está completamente integrado con Redis para:
- Almacenar sesiones activas – Cada token tiene una entrada en Redis
- Invalidación instantánea – Revocación sin esperar expiración del token
- Tracking de múltiples sesiones – Un usuario puede tener varias sesiones activas
- Cleanup automático – Limpieza de sesiones expiradas
Schemas Relacionados
User Schema
Schema principal con campos de seguridad:
email– Email único del usuariopassword– Hash bcrypt de la contraseñapinSecurity– Objeto con configuración PINkycVerified– Estado de verificación KYCroles– Array de roles asignadostwoFactorEnabled– Estado de 2FA
OAuth2 Schema
Configuración de OAuth2 y KYC:
userId– Referencia al usuarioprovider– Proveedor OAuth (Google, Facebook, etc.)kycStatus– Estado detallado de KYCverificationLevel– Nivel de verificación alcanzado
SessionAccess Schema
Control de sesiones activas:
userId– Usuario propietario de la sesiónjti– JWT ID únicodeviceInfo– Información del dispositivolastActivity– Última actividad registradaexpiresAt– Fecha de expiración
LogoutRecord Schema
Registro de cierres de sesión:
userId– Usuario que cerró sesiónjti– JWT ID revocadologoutType– Manual, automático o forzadodeviceInfo– Dispositivo donde se cerró sesión
LinkedDevice Schema
Dispositivos vinculados:
userId– Usuario propietariodeviceId– Identificador únicodeviceName– Nombre descriptivodeviceType– Tipo de dispositivolinkedAt– Fecha de vinculaciónlastUsed– Último uso del dispositivo
Servicios de Autenticación
PIN Security Service
Servicio principal de gestión de PINs:
Métodos principales:
configurePin(userId, pin)– Configuración inicial de PINverifyPin(userId, pin)– Verificación con tracking de intentoscreateApprovedSession(jti, userId)– Crea sesión aprobada en RedisupdatePin(userId, oldPin, newPin)– Cambio de PINrevokeSession(jti)– Revoca sesión específicarevokeAllSessions(userId)– Revoca todas las sesiones del usuario
Protecciones incluidas:
- Límite de intentos fallidos
- Bloqueo temporal tras múltiples fallos
- Logging de eventos de seguridad
- Notificaciones de intentos sospechosos
Notification Service
Servicio de notificaciones de seguridad:
Eventos notificados:
- Inicio de sesión desde nuevo dispositivo
- Intentos fallidos de PIN
- Cambios de contraseña o PIN
- Vinculación de nuevos dispositivos
- Detección de actividad sospechosa
Canales soportados:
- Push notifications
- SMS (integración con proveedores externos)
- Webhooks
DTOs de Autenticación
LoginUserDto
Validación de login:
email– Email válido requeridopassword– Mínimo 8 caracteresdeviceInfo– Información opcional del dispositivo
CreateUserDto
Registro de nuevos usuarios:
email– Email únicopassword– Con requisitos de complejidadfirstName– Nombre requeridolastName– Apellido requerido
ConfigurePinDto
Configuración inicial de PIN:
pin– Exactamente 6 dígitosconfirmPin– Confirmación que debe coincidir
VerifyPinDto
Verificación de PIN:
pin– 6 dígitos a verificarjti– JWT ID para crear sesión aprobada
UpdatePinDto
Cambio de PIN:
oldPin– PIN actual para validaciónnewPin– Nuevo PIN de 6 dígitosconfirmNewPin– Confirmación del nuevo PIN
Guards Encadenados
Los guards se pueden encadenar para crear capas de seguridad personalizadas. Por ejemplo:
@UseGuards(JwtAuthGuard)– JWT + KYC + PIN automático@UseGuards(JwtAuthGuard, RolesGuard)– Autenticación + validación de roles@UseGuards(JwtAuthGuard, DeviceAuthGuard)– Autenticación + dispositivo autorizado@UseGuards(JwtAuthGuard, PinGuard)– Fuerza verificación PIN adicional
Esta flexibilidad permite adaptar la seguridad según la sensibilidad de cada endpoint.