Feature: Auth Redesign v2 · vion-core · Generado 16 Jun 2026 · 10:05
El sistema de autenticación actual (JWT stateless v1) no soporta revocación de tokens ni MFA. Auth Redesign v2 introduce refresh tokens rotativos, almacenamiento seguro en plataforma y soporte TOTP. La constitución del proyecto exige cero dependencias de terceros para el core de auth y cobertura de test ≥ 90%.
auth/token_family.py.vion-totp sin dependencias npm. Ventana de tolerancia: ±1 intervalo de 30 s.refresh_token_families con campos family_id, user_id, current_hash, revoked_at. Índices en user_id y family_id. Migration reversible.TokenService con métodos issue(), rotate() y revoke_family(). La rotación atomiza la invalidación del token anterior y emisión del nuevo en la misma transacción DB.class TokenService: def rotate(self, refresh_token: str) -> TokenPair: # 1. Verificar token → obtener family family = self._verify_and_get_family(refresh_token) if family.is_revoked: # Reutilización detectada → revocar toda la familia self._revoke_family(family.id) raise TokenReplayError("Replay attack detected") # 2. Emitir nuevo par atómicamente return self._atomic_rotate(family)
POST /api/v2/auth/token y añadir POST /api/v2/auth/refresh y DELETE /api/v2/auth/revoke. Deprecar /api/v1/auth/* con header Deprecation: true.SecureStorage con adaptadores para iOS Keychain, Android ESP y Web (sessionStorage con AES-256-GCM, clave en memoria). La API es idéntica entre plataformas.auth_v2_enabled en LaunchDarkly. Rollout: 5% → 25% → 100% con periodo de 2 semanas entre saltos. Métrica de guardia: tasa de errores de auth < 0.1%.| Riesgo | Impacto | Mitigación |
|---|---|---|
| Condición de carrera en rotación concurrente | Alto | Transacción con SELECT FOR UPDATE en family_id |
| Desfase de reloj en validación TOTP | Medio | Ventana ±1 intervalo (90 s efectivos) |
| Clientes móviles cacheando tokens v1 | Medio | Header Cache-Control: no-store + versionado de respuesta |
| Degradación de latencia por consultas extra de familia | Bajo | Índice en family_id + Redis cache de familias activas |