¿Por qué necesita seguridad avanzada?
Un SSO centraliza el acceso: con un solo inicio de sesión se accede a todos los sistemas, lo que lo convierte en el punto más crítico de la infraestructura.
Un único punto de falla
Si alguien compromete el SSO, se accede a todo: correo, datos, herramientas internas, sistemas de producción. Por eso las capas de seguridad adicionales no son opcionales.
Las dos capas esenciales
Para proteger correctamente un SSO, se necesitan dos tecnologías complementarias que atacan el problema desde ángulos distintos.
Cada capa puede explorarse mediante el menú lateral para comprender su funcionamiento y las amenazas que neutraliza.
Autenticación de doble factor
El 2FA exige dos elementos independientes para verificar la identidad del usuario. Si un atacante obtiene la contraseña, no podrá acceder sin el segundo factor.
Los tres factores posibles
-
🧠Algo que se sabe → Contraseña El factor más común y el más vulnerable. Puede ser robado, adivinado o filtrado.
-
📱Algo que se posee → Código TOTP, SMS, llave física Un dispositivo o token que genera o recibe códigos de un solo uso. Mucho más difícil de comprometer remotamente.
-
👁️Algo que se es → Biometría Huella dactilar, reconocimiento facial. Difícil de falsificar pero requiere hardware especializado.
¿Cómo funciona el flujo?
Ingreso de contraseña
El usuario introduce su usuario y contraseña en el SSO. Este es el primer factor: algo que sabe.
Solicitud del segundo factor
El servidor verifica la contraseña y, si es correcta, solicita el segundo factor: un código TOTP, una notificación push, un SMS o una llave física.
Verificación del segundo factor
El usuario presenta el segundo elemento (algo que tiene o es). El servidor lo valida y, solo si ambos factores son correctos, concede el acceso al SSO.
Acceso a todos los sistemas
Con la sesión SSO establecida, el usuario accede a todos los servicios integrados sin necesidad de autenticarse nuevamente.
Ventajas concretas en un SSO
-
✅
Mitiga el robo de contraseñas Si un atacante obtiene la contraseña (phishing, brute force, filtración), no podrá acceder sin el segundo factor.
-
✅
Reduce el impacto de credenciales filtradas Bases de datos comprometidas en servicios externos no ponen en riesgo el SSO.
-
✅
Cumplimiento normativo SOC 2, ISO 27001 y PCI-DSS exigen MFA para accesos a sistemas críticos.
-
✅
Detección temprana de ataques Intentos fallidos del segundo factor permiten alertar sobre ataques en curso antes de que tengan éxito.
Limitación importante
El 2FA basado en TOTP (códigos de 6 dígitos) puede ser interceptado en ataques de phishing sofisticados (adversary-in-the-middle). Para una protección más robusta, considerá las Passkeys.
Passkeys: sin contraseñas
Las Passkeys usan criptografía asimétrica para autenticar. La clave privada nunca sale del dispositivo — el servidor nunca conoce el secreto del usuario.
¿Cómo funciona?
Registro
El dispositivo genera un par de claves únicas para ese sitio. La clave pública se envía al servidor. La privada queda en el dispositivo.
Desafío criptográfico
Al autenticarse, el servidor envía un challenge. El dispositivo lo firma con la clave privada usando biometría o PIN como confirmación local.
Verificación
El servidor verifica la firma con la clave pública almacenada. Si coincide, acceso concedido. Ningún secreto viajó por la red.
Ventajas concretas
-
🛡️
Resistencia nativa al phishing La clave está vinculada criptográficamente al dominio real. Un sitio falso no puede usarla.
-
🛡️
Sin secretos compartidos El servidor solo guarda la clave pública. Una brecha en el servidor no expone credenciales útiles.
-
🛡️
2FA integrado en un solo gesto Posesión del dispositivo + biometría = doble factor sin fricción adicional para el usuario.
-
🛡️
Sin reutilización de credenciales Cada passkey es única por sitio. El credential stuffing se vuelve imposible.
-
🛡️
Mejor experiencia de usuario Autenticarse con huella o cara es más rápido y cómodo que recordar contraseñas complejas.
2FA vs Passkeys
Cada tecnología tiene fortalezas distintas. La siguiente tabla muestra qué amenaza neutraliza cada una.
| Amenaza / Escenario | 2FA tradicional | Passkeys |
|---|---|---|
| Contraseña robada | ✅ Mitiga | ✅ Elimina el problema |
| Phishing básico | ⚠️ Parcial | ✅ Resistencia total |
| Phishing avanzado (AiTM) | ⚠️ TOTP interceptable | ✅ Bloqueado |
| Credential stuffing | ✅ Mitiga | ✅ Elimina |
| Brecha en el servidor | ⚠️ Depende del método | ✅ Clave pública inútil sola |
| Experiencia de usuario | ⚠️ Fricción añadida | ✅ Más rápido que passwords |
| Cumplimiento normativo | ✅ MFA estándar | ✅ MFA + más |
Ninguna tecnología por sí sola cubre todo. Por eso la combinación de ambas es la estrategia más robusta disponible hoy.
La combinación ideal
Usar 2FA y Passkeys juntos en un SSO no es redundante: son capas complementarias que se refuerzan mutuamente.
Resumen ejecutivo
-
🔐
El SSO es la llave maestra Comprometer el SSO significa comprometer todo. El nivel de protección debe ser proporcional al riesgo.
-
📱
El 2FA protege contra contraseñas comprometidas Si un atacante obtiene la contraseña, aún necesita un segundo factor físico para acceder.
-
🗝️
Las Passkeys eliminan la contraseña como vector de ataque Van un paso más allá: si no hay contraseña, no puede ser robada. El phishing queda neutralizado por diseño.
-
✨
Juntas cubren prácticamente todo En un SSO, donde una sola autenticación abre muchas puertas, esta combinación no es un lujo — es una necesidad de diseño.
Cómo implementarlo en el SSO
Pasos detallados para agregar 2FA y Passkeys a un SSO en VB.NET con ASP.NET MVC (.NET Framework 4.8). Se cubren NuGet, base de datos SQL Server, backend y frontend.
Librerías compatibles con VB.NET y .NET 4.8
Para TOTP se usa Otp.NET (compatible con .NET 4.5+). Para WebAuthn/Passkeys se usa Fido2NetLib, que soporta .NET Framework 4.8. Ambas son instalables via NuGet y funcionan igual en VB.NET que en C#, ya que comparten el mismo CLR.
Parte 1 — Implementar 2FA (TOTP)
TOTP (RFC 6238) es el estándar compatible con Google Authenticator, Microsoft Authenticator y Authy. Se implementa completamente en el servidor sin servicios externos.
Parte 2 — Implementar Passkeys (WebAuthn / FIDO2)
Se usa Fido2NetLib, compatible con .NET Framework 4.8. Requiere HTTPS obligatorio — las passkeys están vinculadas criptográficamente al dominio exacto.
Parte 3 — Consideraciones de seguridad en VB.NET
-
🔒
HTTPS obligatorio — web.config e IIS WebAuthn no funciona en HTTP. En
web.configagregar<httpRedirect enabled="true" />y en IIS activar "Require SSL". ElServerDomainde Fido2NetLib debe coincidir exactamente con el dominio del certificado TLS. -
🔒
Rate limiting con ActionFilterAttribute Crear un
RateLimitAttributeque herede deActionFilterAttributey useMemoryCacheo una tabla SQL para contar intentos fallidos por IP. Máximo 5 intentos en 15 minutos antes de bloquear temporalmente. -
🔒
Validar SignCount para detectar clonación de autenticador Fido2NetLib valida el contador automáticamente. Capturar la excepción que lanza cuando el nuevo valor es menor al guardado, registrarla en auditoría y notificar al usuario — puede indicar que alguien clonó su autenticador físico.
-
🔒
Hashing de backup codes con Rfc2898DeriveBytes (PBKDF2) En VB.NET usar
Dim pbkdf2 As New Rfc2898DeriveBytes(code, salt, 100000)para hashear los códigos de respaldo. Nunca usar MD5 o SHA1 sin sal. Generar los bytes aleatorios conRNGCryptoServiceProvider. -
🔒
Anti-CSRF en todos los endpoints POST Decorar todos los actions POST de autenticación con
<ValidateAntiForgeryToken>. Para llamadas AJAX desde las vistas .vbhtml, incluir el token en el header como se muestra en el paso 15. -
🔒
Auditoría con NLog o log4net Registrar todos los eventos: logins exitosos y fallidos, activación/desactivación de 2FA, registro y eliminación de passkeys, intentos MFA fallidos. Incluir siempre UserId, IP, UserAgent y timestamp UTC.
-
🔒
Limpiar challenges y sesiones expiradas Crear un job con Hangfire o Windows Task Scheduler que ejecute
DELETE FROM WebAuthnChallenges WHERE ExpiresAt < GETUTCDATE()y lo mismo paraPendingMfaSessions. Evita acumulación de registros obsoletos.
Registro de 2FA y dispositivo seguro
Proceso paso a paso que debe seguir cada usuario para activar la autenticación de doble factor y registrar un dispositivo seguro con Passkey en el SSO.
Parte A — Activación del doble factor (2FA)
Este proceso se realiza una única vez por usuario. Se requiere acceso previo al SSO con usuario y contraseña, y tener instalada una aplicación de autenticación (Google Authenticator, Microsoft Authenticator o Authy).
Ingresar al SSO con credenciales
El usuario accede a la dirección del SSO e introduce su usuario y contraseña. En esta instancia aún no se solicita ningún segundo factor.
Navegar a Configuración → Seguridad → Activar 2FA
Desde el panel principal del SSO, el usuario accede a su perfil o configuración de cuenta y selecciona la opción de autenticación de dos factores. El sistema presentará la pantalla de configuración.
Escanear el código QR con la aplicación de autenticación
El sistema genera y muestra un código QR único vinculado a la cuenta. El usuario debe abrir su aplicación de autenticación y seleccionar la opción "Agregar cuenta" o el ícono +, luego apuntar la cámara al código QR en pantalla.
Ingresar el código de 6 dígitos generado por la aplicación
Una vez escaneado el QR, la aplicación comenzará a mostrar un código de 6 dígitos que se renueva cada 30 segundos. El usuario debe ingresar ese código en el campo de verificación del SSO y confirmar. El sistema valida que la sincronización sea correcta.
Guardar los códigos de respaldo en lugar seguro
El sistema genera entre 8 y 10 códigos de un solo uso. Estos códigos son la única forma de acceder si el usuario pierde o cambia su dispositivo móvil. Deben guardarse en un lugar seguro y offline.
El doble factor queda activado
A partir de este momento, cada inicio de sesión en el SSO requerirá la contraseña más el código de 6 dígitos. El sistema confirmará la activación y enviará una notificación al correo registrado.
Parte B — Registro de dispositivo seguro (Passkey)
Las Passkeys reemplazan la contraseña con autenticación biométrica o PIN del dispositivo. Pueden registrarse múltiples dispositivos por cuenta (computadora, teléfono, tablet, llave de seguridad física).
Requisitos previos
El dispositivo debe contar con desbloqueo biométrico (huella o Face ID) o PIN configurado. El navegador debe ser Chrome 108+, Safari 16+, Edge 108+ o Firefox 122+. La conexión debe ser HTTPS.
Iniciar sesión en el SSO con credenciales actuales
El registro de una Passkey requiere que el usuario ya esté autenticado en el SSO (con contraseña y 2FA si corresponde). Desde su sesión activa, debe dirigirse a Configuración → Seguridad → Dispositivos de confianza.
Seleccionar "Agregar Passkey" o "Registrar dispositivo seguro"
El sistema presenta la lista de dispositivos ya registrados (si los hubiera) y el botón para agregar uno nuevo. Al presionarlo, el servidor genera un desafío criptográfico único de corta duración que el dispositivo deberá firmar.
Confirmar la creación de la Passkey en el diálogo del sistema operativo
El navegador muestra un diálogo nativo del sistema operativo solicitando confirmación. El usuario debe autenticarse con su método local:
El servidor verifica y almacena la clave pública
El navegador envía la respuesta criptográfica firmada al servidor. El SSO verifica que la firma sea válida y que el challenge coincida, luego almacena únicamente la clave pública asociada a la cuenta del usuario. El proceso completo demora menos de 3 segundos.
Asignar un nombre descriptivo al dispositivo registrado
Para facilitar la administración, el sistema solicita (o sugiere automáticamente) un nombre para el dispositivo, por ejemplo: "MacBook Pro — Oficina", "iPhone 15 — Personal", "YubiKey 5 — Respaldo". Este nombre aparecerá en la lista de dispositivos de confianza.
El dispositivo queda registrado como método de acceso
A partir de este momento, el usuario puede iniciar sesión en el SSO utilizando únicamente su biometría o PIN, sin necesidad de ingresar contraseña. Se recomienda registrar al menos dos dispositivos distintos para contar con una alternativa de acceso.