Backend / Seguridad
Autenticación: email+contraseña (hecho), Google OAuth, 2FA TOTP y recuperación
Autenticación de ConTodo
1. Hecho y en producción (Fase 2)
- Email + contraseña con hash bcrypt, multi-tenant (usuario → empresa + rol).
- Sesiones server-side (tabla
sessions, cookiehttpOnly/secure/sameSite=lax, 30 días, revocables). - Idioma por perfil (
users.locale). - Recuperación de contraseña:
/api/v1/auth/forgotgenera token (1h) +/api/v1/auth/reset. (Falta conectar el envío de correo — ver §4.) - Endpoints:
POST /api/v1/auth/login,GET /api/v1/auth/me,POST /api/v1/auth/logout,POST /api/v1/auth/forgot,POST /api/v1/auth/reset. Página /login. - Esquema listo para Google y TOTP:
users.google_id,users.totp_secret,users.totp_enabled.
2. Google OAuth (mañana)
- Botón "Continuar con Google" → OAuth 2.0 (Authorization Code + PKCE).
- Crea/asocia usuario por
google_id+ email; lo liga a un tenant (invitación o dominio). - Requiere: Client ID/Secret en Google Cloud + URL de callback
https://contodo.app/api/v1/auth/google/callback. - Stack:
arctic/@auth/coreo implementación propia (ya tenemos sesiones).
3. 2FA — TOTP (mañana)
- Opcional por usuario (app autenticadora: Google Authenticator/Authy).
- Activar: generar
totp_secret, mostrar QR (otpauth://), el usuario confirma un código →totp_enabled=true. - En login: si
totp_enabled, pedir el código de 6 dígitos antes de crear la sesión (el login ya devuelvetwofa: true). - Lib:
otplib(TOTP) +qrcode.
4. Correo (recuperación + notificaciones)
¿Se puede enviar por el VPS? Sí — tiene exim. Pero la entregabilidad de un VPS suele caer en spam.
- Recomendado: Resend (free tier, API simple) o Amazon SES (muy barato) como relay. Se conecta en
forgot(link de recuperación) y en notificaciones. - Alternativa: enrutar exim a través de SES.
- Variables:
RESEND_API_KEY(o SMTP del relay).
5. SUNAT — "¿cómo nos integramos?" (recap)
Vía proveedor PSE/OSE (Nubefact/Apisperú/Bizlinks…) con API REST + una capa de facturación abstracta en ConTodo (igual que la de pagos). Cada venta/guía confirmada dispara el comprobante y guarda XML/CDR/PDF. Detalle completo en [[23-integracion-sunat]].
6. Infra lista (esta fase)
- Redis (cache + colas) y MinIO (S3-compatible para fotos/PDF/CSV) ya corriendo en el
docker-composedel VPS. Pendiente: cablear rate-limit (Redis), jobs (pg-boss/BullMQ) y subida de archivos (MinIO). Ver [[31-infra-ops-roadmap]].
Relacionado: [[20-roadmap-backend]] · [[26-despliegue-costos-admin]] · [[32-api-integraciones]].