You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Plataforma de gestión empresarial con sistema de permisos granulares, autenticación segura y arquitectura escalable. Base sólida para integración de IA.
# Backend
git clone https://github.com/peligro/python-demo-ia.git
cd python-demo-ia
# Frontend (en paralelo)
git clone https://github.com/peligro/python-demo-ia-react.git
2. Configurar variables de entorno
backend
cd python-demo-ia
cp .env.example .env
# Editar con tus configuraciones: DATABASE_URL, REDIS_HOST, API keys de IA, etc.
frontend
cd python-demo-ia-react
cp .env.example .env
# Editar VITE_API_URL para apuntar al backend
3. Levantar servicios con Docker
# Desde la raíz del repocd /home/cesar/Documentos/trabajo/repo
docker-compose up -d --build
# Ver logs
docker-compose logs -f python_service
4. Acceder a los servicios
Servicio
URL
Credenciales (dev)
🌐 API Backend
http://localhost:8050
-
📚 Swagger UI
http://localhost:8050/docs
-
🐘 PostgreSQL
localhost:5432
laravel / secret
🔴 Redis
localhost:6379
-
🗂️ pgAdmin
http://localhost:5050
admin@example.com / admin
5. (Opcional) Desarrollo local sin Docker
# Backendcd python/fastapi
pip install -r requirements.txt
uvicorn main:app --host 0.0.0.0 --port 8050 --reload
# Frontend (en otra terminal)cd python/react
npm install
npm run dev
⚙️ Variables de Entorno
⚙️ Variables de Entorno
Backend (python/.env)
# EntornoENVIRONMENT=local# local, productionPORT=8050# Base de datos PostgreSQLDATABASE_URL=postgresql://laravel:secret@postgres:5432/fastapi# Redis para sesiones y rate limitingREDIS_HOST=redisREDIS_PORT=6379REDIS_DB=0SESSION_TTL=86400# 24 horas en segundos# CookiesCOOKIE_DOMAIN=COOKIE_SECURE=false# true en producción con HTTPS# Rate limitingRATE_LIMIT_DEFAULT=120/minuteRATE_LIMIT_STRATEGY=fixed-window# Frontend para CORSALLOWED_ORIGINS=http://localhost:5173,http://127.0.0.1:5173
graph LR
A[Request] --> B{AuthMiddleware?}
B -->|❌ No autenticado | C[401 "No autenticado"]
B -->|✅ Autenticado | D{require_permission?}
D -->|❌ Sin permisos | E[401 "No autenticado"]
D -->|✅ Con permisos | F[Handler]
F --> G[Response]
🔍 Nota: Los endpoints protegidos retornan 401 {"estado":"error","mensaje":"No autenticado"} tanto para usuarios no autenticados como para usuarios sin permisos (fail securely).
📚 Documentación API
📚 Documentación API
Swagger UI
Accede a la documentación interactiva en:
http://localhost:8050/docs
🔒 En producción (ENVIRONMENT=production), /docs y /redoc no se registran.
🛡️ Casos de Seguridad Abordados
🔐 Control de Acceso & Autorización
✅ Segmentación granular de permisos por perfil (módulos + items)
✅ Validación de autorización en cada endpoint (fail securely)
✅ Principio de mínimo privilegio aplicado por defecto
✅ Llave maestra view_all_register para administración total
🔑 Gestión de Sesiones & Autenticación
✅ Sesiones en Redis con TTL configurable (24h dev / 1h prod)
✅ Cookies HttpOnly + Secure + SameSite para protección XSS/CSRF
✅ Blacklist de tokens en logout para prevenir reuso
✅ Hash de contraseñas con bcrypt (costo adaptable)
🌐 Protección de Endpoints & Tráfico
✅ Rate limiting por usuario/IP para prevenir abuso de recursos
✅ Control de origen con CORS + validación de cookies
✅ Restricción de métodos HTTP no necesarios (OPTIONS mitigado)
✅ Respuestas genéricas 401 para no divulgar información interna
🧱 Headers de Seguridad & Hardening
✅ Content-Security-Policy para mitigar inyección de recursos
✅ X-Frame-Options: DENY para prevenir clickjacking
✅ X-Content-Type-Options: nosniff para evitar MIME sniffing
✅ Eliminación de headers Server y X-Powered-By (info disclosure)