trading-platform/docs/02-definicion-modulos/OQI-001-fundamentos-auth/historias-usuario/US-AUTH-010-2fa-setup.md
rckrdmrd c1b5081208 feat(ml): Complete FASE 11 - BTCUSD update and comprehensive documentation alignment
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>
2026-01-07 09:31:29 -06:00

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:

  1. Ver 10 códigos de respaldo
  2. Poder copiarlos al portapapeles
  3. Poder descargarlos como archivo
  4. 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:

  1. Ver "2FA activado exitosamente"
  2. Recibir email de confirmación
  3. 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:

  1. Ver un segundo paso pidiendo código 2FA
  2. Poder ingresar código de mi app
  3. Tener opción de usar código de respaldo

AC-010: Desactivar 2FA

Dado que tengo 2FA activado Cuando intento desactivarlo Entonces debería:

  1. Ingresar un código 2FA válido
  2. Confirmar la acción
  3. 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 qrcode npm package

Backend

  • Service: apps/backend/src/modules/auth/services/twofa.service.ts
  • Endpoints:
    • POST /auth/2fa/setup
    • POST /auth/2fa/enable
    • POST /auth/2fa/verify
    • POST /auth/2fa/disable

Requerimientos Relacionados

Especificaciones Relacionadas