Aprobación automática de solicitudes de dispositivos SSO en Keeper Enterprise. Sin intervención manual, con historial completo y notificaciones instantáneas.
Keeper Enterprise con SSO requiere aprobación de cada nuevo dispositivo desde el que un usuario inicia sesión. Este servicio automatiza ese proceso completamente.
Detecta solicitudes de dispositivos pendientes cada 30 segundos y las aprueba sin intervención.
Email HTML detallado con usuario, dispositivo, IP y ubicación al instante de cada aprobación.
Historial del último mes con filtros por usuario y período. Disponible en el puerto 5050.
La master password se cifra con Windows DPAPI, vinculada a la máquina. No está en texto plano en ningún fichero.
WinSW reinicia el servicio automáticamente si falla. El poller reintenta si keeper shell termina.
Cada aprobación queda registrada con usuario, dispositivo, IP, tipo y marca de tiempo.
Proceso persistente que monitoriza la salida de Keeper Commander en tiempo real.
Panel web con historial, filtros y detalle raw de cada aprobación
Notificación HTML al aprobar. Incluye usuario, dispositivo, IP y ubicación
Rotación automática: máx 10 MB × 3 ficheros por stdout/stderr
Ver DEPLOY.md para instrucciones completas. Resumen del proceso:
Clonar el repositorio y colocar WinSW-x64.exe renombrado como keeper-commander-service.exe en el directorio del proyecto.
Copiar config.example.json → config.json con el usuario de la cuenta de servicio.
Necesario para registrar el dispositivo y desactivar el 2FA periódico.
El password se cifra vinculado a la máquina. No se guarda en texto plano.
Las credenciales se protegen en varias capas sin comprometer la operación autónoma.
La master password se cifra con la API de protección de datos de Windows. credentials.dat solo es descifrable en la misma máquina.
config.json tiene permisos solo para Administradores y SYSTEM. El install script elimina la herencia y restringe el acceso.
config.json y credentials.dat están en .gitignore. Ningún secreto llega al repositorio.
En producción: cuenta dedicada con permisos mínimos (solo device approval), sin SSO, sin acceso al vault.
keeper_commander/ ├── run_service.py # Punto de entrada: Flask + poller ├── poller.py # keeper shell persistente, parseo de aprobaciones ├── database.py # SQLite: approvals, runs, pending_approvals ├── notifier.py # Email HTML al aprobar dispositivos ├── webapp.py # Flask: panel web con historial y filtros ├── credentials.py # Cifrado/descifrado DPAPI ├── templates/ │ └── index.html # UI del panel web (dark theme) ├── settings.json # Config: SMTP, puerto, intervalo ├── config.example.json # Plantilla de config.json ├── config.json # ⚠ gitignored — user, server, commands ├── credentials.dat # ⚠ gitignored — password cifrado DPAPI ├── requirements.txt # keepercommander, flask ├── keeper-commander-service.xml # Descriptor WinSW ├── install_service.ps1 # Instalador Windows ├── install_service.sh # Instalador Linux (systemd) ├── deploy.ps1 # git pull + pip + restart ├── README.md └── DEPLOY.md