Aptli

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:

  1. Navegar al perfil de usuario
  2. Hacer clic en "Habilitar Autenticación de Dos Factores"
  3. Escanear código QR con app autenticadora (Google Authenticator, Authy, etc.)
  4. Ingresar código de 6 dígitos para confirmar
  5. Guardar códigos de recuperación (en caso de perder teléfono)

Inicio de Sesión con 2FA:

  1. Ingresar correo electrónico y contraseña (o OAuth)
  2. El sistema solicita código de 6 dígitos
  3. Abrir app autenticadora
  4. Ingresar código actual (se refresca cada 30 segundos)
  5. 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:

  1. Navegar a Admin → Usuarios
  2. Agregar columna: "2FA Habilitado" (booleano)
  3. Filtrar: "2FA Habilitado = falso"
  4. 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:

  1. Ir a Configuraciones de GitHub → Configuraciones de Desarrollador → Apps OAuth
  2. Hacer clic en "Nueva App OAuth"
  3. Nombre de aplicación: "Aptli"
  4. URL de página principal: https://tu-dominio.com
  5. URL de callback de autorización: https://tu-dominio.com/api/auth/github/callback
  6. Hacer clic en "Registrar Aplicación"
  7. Copiar ID de Cliente y Secreto de Cliente

Configurar Aptli:

  1. Agregar a .env:
    NUXT_OAUTH_GITHUB_CLIENT_ID=tu_client_id
    NUXT_OAUTH_GITHUB_CLIENT_SECRET=tu_client_secret
    
  2. Reiniciar servidor
  3. Probar: Página de inicio de sesión muestra botón "Iniciar sesión con GitHub"

OAuth de Google

Crear App OAuth de Google:

  1. Ir a Consola de Google Cloud → APIs y Servicios → Credenciales
  2. Hacer clic en "Crear Credenciales" → ID de Cliente OAuth
  3. Tipo de aplicación: Aplicación web
  4. Nombre: "Aptli"
  5. URIs de redireccionamiento autorizadas: https://tu-dominio.com/api/auth/google/callback
  6. Hacer clic en "Crear"
  7. Copiar ID de Cliente y Client Secret

Configurar Aptli:

  1. Agregar a .env:
    NUXT_OAUTH_GOOGLE_CLIENT_ID=tu_client_id.apps.googleusercontent.com
    NUXT_OAUTH_GOOGLE_CLIENT_SECRET=tu_client_secret
    
  2. Reiniciar servidor
  3. 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:

  1. Iniciar sesión con correo electrónico y contraseña
  2. Navegar al perfil de usuario
  3. Hacer clic en "Vincular Cuenta OAuth"
  4. Elegir proveedor (GitHub o Google)
  5. Autorizar con proveedor
  6. 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:

  1. Usuario se registra (o admin crea cuenta)
  2. Correo de validación enviado a dirección de correo del usuario
  3. Correo contiene token de expiración de 10 minutos
  4. Usuario hace clic en enlace en correo
  5. 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:

  1. Navegar a Admin → Usuarios
  2. Abrir perfil de usuario
  3. Hacer clic en "Reenviar Correo de Validación"
  4. Nuevo token de 10 minutos enviado

Validación Manual: Admin con usersUpdate puede validar manualmente:

  1. Navegar al perfil de usuario
  2. Establecer fecha "Correo Validado" a fecha actual
  3. 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:

  1. Navegar a Admin → Usuarios
  2. Abrir perfil de usuario
  3. Acciones → Forzar Cierre de Sesión
  4. Sesión del usuario terminada inmediatamente
  5. 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:

  1. Navegar a Admin → Usuarios
  2. Filtrar por correo electrónico (sensible a mayúsculas)
  3. Si no encontrado: Cuenta puede estar eliminada
  4. Hacer clic en botón "Ver Eliminados" (requiere permiso viewDeleted)
  5. Si encontrado en eliminados: Restaurar (requiere permiso usersCreate)

Bloqueo Duro

Verificar:

  1. Navegar al perfil de usuario
  2. Buscar insignia "Bloqueo Duro"
  3. Si presente: Hacer clic en "Desbloquear Cuenta" (requiere permiso usersUpdate)
  4. Usuario ahora puede iniciar sesión

Correo No Validado

Verificar:

  1. Navegar al perfil de usuario
  2. Campo "Correo Validado" debería tener fecha
  3. Si en blanco: Reenviar correo de validación O establecer fecha manualmente
  4. Usuario no puede iniciar sesión vía cualquier método sin validación

Dominio Malo

Verificar:

  1. Navegar a Configuraciones de App → Autenticación
  2. Lista "Dominios Permitidos"
  3. Verificar dominio de correo del usuario incluido
  4. Si faltante: Agregar dominio O crear cuenta manualmente (bypasa verificación de dominio)

OAuth No Funcionando

Verificar:

  1. Verificar variables de entorno establecidas (CLIENT_ID, CLIENT_SECRET)
  2. Verificar URL de callback coincide con configuración de proveedor
  3. Probar: Cerrar sesión, hacer clic en "Iniciar sesión con Proveedor"
  4. Mensajes de error en consola del navegador
  5. Verificar tablero de proveedor para intentos de auth

Restablecimiento de Contraseña

Iniciado por Usuario:

  1. Hacer clic en "Olvidé Contraseña" en página de inicio de sesión
  2. Ingresar dirección de correo electrónico
  3. Correo de restablecimiento enviado (token de 10 minutos)
  4. Hacer clic en enlace en correo
  5. Ingresar nueva contraseña
  6. Contraseña restablecida (ahora puede iniciar sesión)

Iniciado por Admin: Admin con usersUpdate puede restablecer:

  1. Navegar al perfil de usuario
  2. Acciones → Restablecer Contraseña
  3. Contraseña temporal generada
  4. Correo enviado a usuario con contraseña temporal
  5. 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)