ML Engine Updates: - Updated BTCUSD with Polygon API data (2024-2025): 215,699 new records - Re-trained all ML models: Attention (R²: 0.223), Base, Metamodel (87.3% confidence) - Backtest results: +176.71R profit with aggressive_filter strategy Documentation Consolidation: - Created docs/99-analisis/_MAP.md index with 13 new analysis documents - Consolidated inventories: removed duplicates from orchestration/inventarios/ - Updated ML_INVENTORY.yml with BTCUSD metrics and training results - Added execution reports: FASE11-BTCUSD, correction issues, alignment validation Architecture & Integration: - Updated all module documentation with NEXUS v3.4 frontmatter - Fixed _MAP.md indexes across all folders - Updated orchestration plans and traces Files: 229 changed, 5064 insertions(+), 1872 deletions(-) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
18 KiB
| id | title | type | status | priority | epic | story_points | created_date | updated_date |
|---|---|---|---|---|---|---|---|---|
| US-AUTH-010 | Configurar 2FA | User Story | Done | Alta | OQI-001 | 5 | 2025-12-05 | 2026-01-04 |
US-AUTH-010: Configurar 2FA
Version: 1.0.0 Fecha: 2025-12-05 Estado: ✅ Implementado Story Points: 5 Prioridad: P1 (Alta) Épica: OQI-001
Historia de Usuario
Como usuario de Trading Platform Quiero poder activar autenticación de dos factores Para proteger mi cuenta con una capa adicional de seguridad
Criterios de Aceptación
AC-001: Acceso a configuración 2FA
Dado que estoy logueado en mi cuenta Cuando voy a Configuración > Seguridad Entonces debería ver una opción para "Activar autenticación de dos factores"
AC-002: Generación de código QR
Dado que hago click en "Activar 2FA" Cuando se inicia el proceso de configuración Entonces debería ver:
- Un código QR para escanear
- El secreto manual como alternativa
- Instrucciones claras
AC-003: Lista de apps compatibles
Dado que estoy configurando 2FA Cuando veo las instrucciones Entonces debería ver una lista de apps compatibles:
- Google Authenticator
- Microsoft Authenticator
- Authy
- 1Password
AC-004: Verificación de código
Dado que escaneé el código QR con mi app Cuando ingreso el código de 6 dígitos generado Entonces debería verificarse correctamente si es válido
AC-005: Código inválido
Dado que escaneé el código QR con mi app Cuando ingreso un código incorrecto Entonces debería ver "Código incorrecto, intenta de nuevo"
AC-006: Generación de backup codes
Dado que verifico el código correctamente Cuando se activa el 2FA Entonces debería:
- Ver 10 códigos de respaldo
- Poder copiarlos al portapapeles
- Poder descargarlos como archivo
- Ver advertencia de guardarlos en lugar seguro
AC-007: Confirmación de guardado
Dado que veo mis códigos de respaldo Cuando no confirmo que los guardé Entonces no debería poder continuar
AC-008: 2FA activado exitosamente
Dado que confirmé guardar mis códigos Cuando continúo Entonces debería:
- Ver "2FA activado exitosamente"
- Recibir email de confirmación
- Ver indicador de 2FA activo en mi perfil
AC-009: Login con 2FA
Dado que tengo 2FA activado Cuando hago login con email/password Entonces debería:
- Ver un segundo paso pidiendo código 2FA
- Poder ingresar código de mi app
- Tener opción de usar código de respaldo
AC-010: Desactivar 2FA
Dado que tengo 2FA activado Cuando intento desactivarlo Entonces debería:
- Ingresar un código 2FA válido
- Confirmar la acción
- Recibir email de notificación
Flujo Visual
┌──────────────────────────────────────────────────────────────────────────┐
│ │
│ PASO 1: Configuración de seguridad │
│ │
│ ┌────────────────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ ⚙️ Configuración > Seguridad │ │
│ │ │ │
│ │ ┌──────────────────────────────────────────────────────────────┐│ │
│ │ │ ││ │
│ │ │ 🔐 Autenticación de dos factores ││ │
│ │ │ ││ │
│ │ │ Estado: ❌ Desactivado ││ │
│ │ │ ││ │
│ │ │ Agrega una capa extra de seguridad a tu cuenta. ││ │
│ │ │ Necesitarás tu teléfono para iniciar sesión. ││ │
│ │ │ ││ │
│ │ │ [Activar 2FA] ││ │
│ │ │ ││ │
│ │ └──────────────────────────────────────────────────────────────┘│ │
│ │ │ │
│ └────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ PASO 2: Escanear código QR │
│ │
│ ┌────────────────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ 📱 Configura tu aplicación de autenticación │ │
│ │ │ │
│ │ 1. Descarga una app de autenticación: │ │
│ │ • Google Authenticator │ │
│ │ • Microsoft Authenticator │ │
│ │ • Authy │ │
│ │ │ │
│ │ 2. Escanea este código QR: │ │
│ │ │ │
│ │ ┌─────────────────┐ │ │
│ │ │ ▄▄▄▄▄ ▄▄▄▄▄ │ │ │
│ │ │ █ █ █ █ │ │ │
│ │ │ █████ █████ │ │ │
│ │ │ █ █ █ █ │ │ │
│ │ │ ▀▀▀▀▀ ▀▀▀▀▀ │ │ │
│ │ └─────────────────┘ │ │
│ │ │ │
│ │ ¿No puedes escanear? Ingresa este código manualmente: │ │
│ │ JBSWY3DPEHPK3PXP [Copiar] │ │
│ │ │ │
│ │ 3. Ingresa el código de 6 dígitos: │ │
│ │ ┌─────────────────────────────┐ │ │
│ │ │ _ _ _ _ _ _ │ │ │
│ │ └─────────────────────────────┘ │ │
│ │ │ │
│ │ [Cancelar] [Verificar y activar] │ │
│ │ │ │
│ └────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ PASO 3: Guardar códigos de respaldo │
│ │
│ ┌────────────────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ 🔑 Guarda tus códigos de respaldo │ │
│ │ │ │
│ │ ⚠️ IMPORTANTE: Guarda estos códigos en un lugar seguro. │ │
│ │ Si pierdes acceso a tu app de autenticación, estos códigos │ │
│ │ son la única forma de acceder a tu cuenta. │ │
│ │ │ │
│ │ ┌──────────────────────────────────────────────────────────────┐│ │
│ │ │ ││ │
│ │ │ A1B2C3D4 E5F6G7H8 I9J0K1L2 M3N4O5P6 ││ │
│ │ │ Q7R8S9T0 U1V2W3X4 Y5Z6A7B8 C9D0E1F2 ││ │
│ │ │ G3H4I5J6 K7L8M9N0 ││ │
│ │ │ ││ │
│ │ └──────────────────────────────────────────────────────────────┘│ │
│ │ │ │
│ │ [📋 Copiar códigos] [⬇️ Descargar como archivo] │ │
│ │ │ │
│ │ ☐ He guardado mis códigos de respaldo en un lugar seguro │ │
│ │ │ │
│ │ [Continuar] │ │
│ │ │ │
│ └────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ PASO 4: Confirmación │
│ │
│ ┌────────────────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ ✅ 2FA activado exitosamente │ │
│ │ │ │
│ │ Tu cuenta ahora está protegida con autenticación de dos │ │
│ │ factores. Necesitarás tu app de autenticación cada vez que │ │
│ │ inicies sesión. │ │
│ │ │ │
│ │ [Volver a configuración] │ │
│ │ │ │
│ └────────────────────────────────────────────────────────────────────┘ │
│ │
└──────────────────────────────────────────────────────────────────────────┘
Login con 2FA
┌──────────────────────────────────────────────────────────────────────────┐
│ │
│ PASO 1: Login normal │
│ │
│ ┌────────────────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ Email: usuario@example.com │ │
│ │ Password: •••••••• │ │
│ │ │ │
│ │ [Iniciar sesión] │ │
│ │ │ │
│ └────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ PASO 2: Verificación 2FA │
│ │
│ ┌────────────────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ 🔐 Verificación de dos factores │ │
│ │ │ │
│ │ Ingresa el código de 6 dígitos de tu app de autenticación: │ │
│ │ │ │
│ │ ┌─────────────────────────────┐ │ │
│ │ │ _ _ _ _ _ _ │ │ │
│ │ └─────────────────────────────┘ │ │
│ │ │ │
│ │ [Verificar] │ │
│ │ │ │
│ │ ¿Problemas para acceder? Usa un código de respaldo │ │
│ │ │ │
│ └────────────────────────────────────────────────────────────────────┘ │
│ │
└──────────────────────────────────────────────────────────────────────────┘
Notas Técnicas
Librería TOTP
import speakeasy from 'speakeasy';
// Generar secreto
const secret = speakeasy.generateSecret({
length: 20,
name: `Trading Platform:${user.email}`,
issuer: 'Trading Platform',
});
// Verificar código
const verified = speakeasy.totp.verify({
secret: user.twoFactorSecret,
encoding: 'base32',
token: code,
window: 1, // ±30 segundos
});
Almacenamiento Seguro
- Secreto TOTP encriptado con AES-256-GCM
- Backup codes hasheados con bcrypt
- Nunca loguear secretos
Frontend
- Componente:
apps/frontend/src/modules/settings/pages/Security.tsx - QR generado con
qrcodenpm package
Backend
- Service:
apps/backend/src/modules/auth/services/twofa.service.ts - Endpoints:
POST /auth/2fa/setupPOST /auth/2fa/enablePOST /auth/2fa/verifyPOST /auth/2fa/disable