Autenticación
La autenticación verifica quién eres antes de conceder acceso a Aptli. Esta sección cubre métodos de inicio de sesión, seguridad de cuenta, validación de correo electrónico y configuración de proveedores OAuth.
Métodos de Inicio de Sesión Activos
Página de inicio de sesión mostrando métodos de autenticación disponibles incluyendo proveedores OAuth
Configura qué métodos de autenticación están disponibles:
Usuario/Contraseña (Predeterminado):
- Combinación de correo electrónico + contraseña
- Requisitos de contraseña: mínimo 8 caracteres, reglas de complejidad
- Cierre de sesión automático después de inactividad (configurable, predeterminado 1 día)
Proveedores OAuth:
- OAuth de GitHub
- OAuth de Google
- Proveedores adicionales configurables (contactar soporte)
Configuración: Navegar a Configuraciones de App → Autenticación → Métodos de Inicio de Sesión Activos
- Al menos un método debe estar habilitado
- Múltiples métodos pueden estar activos simultáneamente
- Los usuarios eligen método preferido en la pantalla de inicio de sesión
Autenticación de Dos Factores (2FA)
Perfil de usuario mostrando configuraciones 2FA y configuración de seguridad
Habilitando 2FA:
- Navegar al perfil de usuario
- Hacer clic en "Habilitar Autenticación de Dos Factores"
- Escanear código QR con app autenticadora (Google Authenticator, Authy, etc.)
- Ingresar código de 6 dígitos para confirmar
- Guardar códigos de recuperación (en caso de perder teléfono)
Inicio de Sesión con 2FA:
- Ingresar correo electrónico y contraseña (o OAuth)
- El sistema solicita código de 6 dígitos
- Abrir app autenticadora
- Ingresar código actual (se refresca cada 30 segundos)
- Acceso concedido
Códigos de Recuperación:
- 10 códigos de un solo uso generados al configurar 2FA
- Almacenar de forma segura (gestor de contraseñas, copia impresa)
- Usar si autenticador no disponible
- Cada código válido una vez
Deshabilitando 2FA:
- Navegar al perfil de usuario
- Hacer clic en "Deshabilitar Autenticación de Dos Factores"
- Ingresar código de 6 dígitos actual (o código de recuperación)
- Confirmar deshabilitación
Detectando Usuarios Sin 2FA
Vista de Admin:
- Navegar a Admin → Usuarios
- Agregar columna: "2FA Habilitado" (booleano)
- Filtrar: "2FA Habilitado = falso"
- Exportar lista para seguimiento
Aplicación: Configuraciones de App → Autenticación → Requerir 2FA
- Habilitar para forzar a todos los usuarios a configurar 2FA
- Período de gracia configurable (ej. 30 días)
- Después del período de gracia, los usuarios no pueden iniciar sesión sin 2FA
Campaña de Notificación:
- Correo masivo a usuarios sin 2FA
- Incluir instrucciones de configuración
- Enfatizar beneficios de seguridad
- Establecer fecha límite para cumplimiento
Configuración de Proveedor OAuth
OAuth de GitHub
Crear App OAuth de GitHub:
- Ir a Configuraciones de GitHub → Configuraciones de Desarrollador → Apps OAuth
- Hacer clic en "Nueva App OAuth"
- Nombre de aplicación: "Aptli"
- URL de página principal:
https://tu-dominio.com - URL de callback de autorización:
https://tu-dominio.com/api/auth/github/callback - Hacer clic en "Registrar Aplicación"
- Copiar ID de Cliente y Secreto de Cliente
Configurar Aptli:
- Agregar a
.env:NUXT_OAUTH_GITHUB_CLIENT_ID=tu_client_id NUXT_OAUTH_GITHUB_CLIENT_SECRET=tu_client_secret - Reiniciar servidor
- Probar: Página de inicio de sesión muestra botón "Iniciar sesión con GitHub"
OAuth de Google
Crear App OAuth de Google:
- Ir a Consola de Google Cloud → APIs y Servicios → Credenciales
- Hacer clic en "Crear Credenciales" → ID de Cliente OAuth
- Tipo de aplicación: Aplicación web
- Nombre: "Aptli"
- URIs de redireccionamiento autorizadas:
https://tu-dominio.com/api/auth/google/callback - Hacer clic en "Crear"
- Copiar ID de Cliente y Client Secret
Configurar Aptli:
- Agregar a
.env:NUXT_OAUTH_GOOGLE_CLIENT_ID=tu_client_id.apps.googleusercontent.com NUXT_OAUTH_GOOGLE_CLIENT_SECRET=tu_client_secret - Reiniciar servidor
- Probar: Página de inicio de sesión muestra botón "Iniciar sesión con Google"
Agregando OAuth a Cuenta de Usuario
Para Usuarios Existentes de Usuario/Contraseña:
- Iniciar sesión con correo electrónico y contraseña
- Navegar al perfil de usuario
- Hacer clic en "Vincular Cuenta OAuth"
- Elegir proveedor (GitHub o Google)
- Autorizar con proveedor
- Cuenta OAuth vinculada (ahora puede iniciar sesión con cualquier método)
Para Nuevos Usuarios:
- Primer inicio de sesión con OAuth crea cuenta automáticamente
- Correo electrónico del proveedor OAuth debe estar en dominios permitidos
- Cuenta creada con inicio de sesión solo OAuth (sin contraseña establecida)
- Puede agregar contraseña después desde perfil
Validación de Correo Electrónico
Flujo de Nuevo Usuario:
- Usuario se registra (o admin crea cuenta)
- Correo de validación enviado a dirección de correo del usuario
- Correo contiene token de expiración de 10 minutos
- Usuario hace clic en enlace en correo
- Cuenta validada (ahora puede iniciar sesión)
Validación Requerida:
- No puede iniciar sesión (cualquier método) hasta que correo validado
- Incluye usuarios OAuth (correo debe validarse incluso si proveedor verificado)
Reenviar Correo de Validación: Admin puede reenviar desde perfil de usuario:
- Navegar a Admin → Usuarios
- Abrir perfil de usuario
- Hacer clic en "Reenviar Correo de Validación"
- Nuevo token de 10 minutos enviado
Validación Manual:
Admin con usersUpdate puede validar manualmente:
- Navegar al perfil de usuario
- Establecer fecha "Correo Validado" a fecha actual
- Guardar (usuario ahora puede iniciar sesión)
Seguridad de Inicio de Sesión
Máximo Intentos de Inicio de Sesión:
- Predeterminado: 5 intentos fallidos
- Configurable en Configuraciones de App
- Después de máximo intentos: cuenta bloqueada duramente
- Desbloquear requiere admin con permiso
usersUpdate
Bloqueo Duro:
- Cuenta no puede iniciar sesión (cualquier método)
- Visible en perfil de usuario: insignia "Bloqueo Duro"
- Desbloquear: Admin hace clic en acción "Desbloquear Cuenta"
- Reiniciar: Contador de intentos fallidos reiniciado a 0
Expiración de Sesión:
- Cierre Automático: Tiempo de espera de inactividad (predeterminado 1 día)
- Leer o escribir datos reinicia cuenta regresiva
- Configurable por configuraciones de app
- Expiración de Token CSRF: Tiempo de espera de sesión de servidor (predeterminado 1 semana)
- Fuerza re-inicio de sesión independientemente de actividad
- Medida de seguridad para sesiones de larga duración
- Expiración de Sesión: Duración máxima absoluta de sesión (predeterminado 1 semana)
- Previene sesiones indefinidas
Sesión Activa Única:
- Aptli permite una única sesión activa por cuenta a la vez
- Iniciar sesión en un nuevo dispositivo cierra su sesión en los otros dispositivos
- Verá un aviso y se le pedirá que inicie sesión de nuevo en el dispositivo cerrado
- Dos pestañas o ventanas en el mismo perfil del navegador comparten una sesión — no se cierran mutuamente
Forzar Cierre de Sesión
Acción de Admin:
- Navegar a Admin → Usuarios
- Abrir perfil de usuario
- Acciones → Forzar Cierre de Sesión
- Sesión del usuario terminada inmediatamente
- Usuario debe re-iniciar sesión
Casos de Uso:
- Incidente de seguridad (cuenta comprometida)
- Usuario dejó sesión abierta en computadora pública
- Bloqueo administrativo (pendiente de investigación)
Solución de Problemas de Inicio de Sesión
Usuario No Puede Encontrar Cuenta
Verificar:
- Navegar a Admin → Usuarios
- Filtrar por correo electrónico (sensible a mayúsculas)
- Si no encontrado: Cuenta puede estar eliminada
- Hacer clic en botón "Ver Eliminados" (requiere permiso
viewDeleted) - Si encontrado en eliminados: Restaurar (requiere permiso
usersCreate)
Bloqueo Duro
Verificar:
- Navegar al perfil de usuario
- Buscar insignia "Bloqueo Duro"
- Si presente: Hacer clic en "Desbloquear Cuenta" (requiere permiso
usersUpdate) - Usuario ahora puede iniciar sesión
Correo No Validado
Verificar:
- Navegar al perfil de usuario
- Campo "Correo Validado" debería tener fecha
- Si en blanco: Reenviar correo de validación O establecer fecha manualmente
- Usuario no puede iniciar sesión vía cualquier método sin validación
Dominio Malo
Verificar:
- Navegar a Configuraciones de App → Autenticación
- Lista "Dominios Permitidos"
- Verificar dominio de correo del usuario incluido
- Si faltante: Agregar dominio O crear cuenta manualmente (bypasa verificación de dominio)
OAuth No Funcionando
Verificar:
- Verificar variables de entorno establecidas (CLIENT_ID, CLIENT_SECRET)
- Verificar URL de callback coincide con configuración de proveedor
- Probar: Cerrar sesión, hacer clic en "Iniciar sesión con Proveedor"
- Mensajes de error en consola del navegador
- Verificar tablero de proveedor para intentos de auth
Restablecimiento de Contraseña
Iniciado por Usuario:
- Hacer clic en "Olvidé Contraseña" en página de inicio de sesión
- Ingresar dirección de correo electrónico
- Correo de restablecimiento enviado (token de 10 minutos)
- Hacer clic en enlace en correo
- Ingresar nueva contraseña
- Contraseña restablecida (ahora puede iniciar sesión)
Iniciado por Admin:
Admin con usersUpdate puede restablecer:
- Navegar al perfil de usuario
- Acciones → Restablecer Contraseña
- Contraseña temporal generada
- Correo enviado a usuario con contraseña temporal
- Usuario debe cambiar contraseña en primer inicio de sesión
Mejores Prácticas
Habilitar 2FA:
- Requerir para todas las cuentas de admin
- Animar a todos los usuarios
- Establecer fecha límite de cumplimiento
Usar OAuth Cuando Posible:
- Reduce fatiga de contraseña
- Aprovecha seguridad de proveedor
- Recuperación de cuenta más fácil
Monitorear Inicios de Sesión Fallidos:
- Revisar cuentas bloqueadas semanalmente
- Patrón de bloqueos = ataque de adivinanza de contraseña
- Habilitar aplicación de 2FA
Expiración Regular de Sesión:
- No establecer tiempo de espera de inactividad demasiado largo (24 horas razonable)
- Expiración CSRF previene sesiones indefinidas
- Equilibrar seguridad vs. conveniencia de usuario
Dominios Permitidos:
- Mantener lista ajustada (solo dominios de org)
- Contratistas externos = crear manualmente (bypasa verificación de dominio)
- Revisar trimestralmente (remover dominios no usados)