Seguridad y permisos
Arquitectura de seguridad de Aidoo: autenticación OAuth y por clave API, control de acceso por rol, cifrado de credenciales y registro de actividad.
Arquitectura de seguridad
Aidoo aplica un enfoque de seguridad en profundidad. Cada petición MCP pasa por el backend Express, que se encarga de la autenticación, el control de acceso, el cifrado y el registro antes de llegar a Odoo.
Asistente IA → Servidor MCP → Backend Aidoo → Odoo XML-RPC
├─ Auth (JWT / API Key)
├─ Control de permisos
├─ Registro de actividad
└─ Cifrado de credenciales
Autenticación
Aidoo propone tres métodos de autenticación según el contexto de uso.
OAuth 2.1 (Claude.ai, ChatGPT, Claude Desktop, Claude Code — recomendado)
Para los clientes que soportan OAuth (Claude.ai, ChatGPT, Claude Desktop, Claude Code), la autenticación se gestiona mediante un flujo OAuth 2.1 estándar:
- Ninguna clave API que manipular del lado del usuario, así que ningún secreto que filtrar
- El token de acceso es de corta duración y se renueva automáticamente
- La autorización está limitada a una empresa: el usuario selecciona explícitamente qué organización Aidoo autoriza
- La revocación es inmediata desde el panel de Aidoo
Es el método por defecto recomendado para la mayoría de los usuarios. Consulta la guía Conectarse con Claude.
Claves API (IDEs sin OAuth)
Para los IDEs que no soportan OAuth (Cursor, Windsurf, etc.), las claves API autentican las peticiones programáticas. Cada clave:
- Se hashea con SHA-256 antes de almacenarse (la clave en claro nunca se guarda)
- Lleva un prefijo
aid_live_para una identificación rápida - Está vinculada a un usuario y a una empresa
- Puede revocarse instantáneamente desde el panel
Consulta las guías Claves API y Clientes locales para una gestión completa.
JWT (sesiones del panel)
Las sesiones del panel web utilizan tokens JWT:
- Access token: vida útil de 15 minutos, transmitido mediante la cabecera
Authorization - Refresh token: vida útil de 30 días, transmitido mediante una cookie httpOnly segura
- La renovación es automática y transparente para el usuario
Roles y control de acceso
Aidoo utiliza un sistema de roles a tres niveles, aplicado por empresa. Un mismo usuario puede tener roles distintos según la empresa.
| Rol | Alcance |
|---|---|
| Owner | Control total: gestión de la empresa, los miembros, las claves API, la facturación y la conexión Odoo |
| Admin | Administración: gestión de las claves API de todos los miembros, acceso a todos los logs, configuración de Odoo |
| Member | Acceso limitado: gestión únicamente de sus propias claves API, consulta de sus propios logs |
Ejemplos concretos
| Acción | Owner | Admin | Member |
|---|---|---|---|
| Crear una clave API para sí mismo | Sí | Sí | Sí |
| Revocar la clave de otro miembro | Sí | Sí | No |
| Consultar todos los logs | Sí | Sí | No |
| Modificar la conexión Odoo | Sí | Sí | No |
| Invitar a un nuevo miembro | Sí | Sí | No |
| Gestionar la facturación | Sí | No | No |
| Transferir la propiedad | Sí | No | No |
Aislamiento multi-tenant
Cada petición está limitada a una empresa. Un usuario solo puede acceder a los recursos de las empresas a las que pertenece. El middleware comprueba sistemáticamente la pertenencia antes de cualquier operación.
Cifrado de credenciales Odoo
Las credenciales de conexión Odoo (URL, base de datos, contraseña) se cifran en reposo en la base de datos.
Algoritmo
- AES-256-GCM (Galois/Counter Mode): cifrado autenticado que garantiza a la vez la confidencialidad y la integridad de los datos
- Vector de inicialización (IV): 16 bytes aleatorios generados para cada operación de cifrado
- Tag de autenticación: 16 bytes para detectar cualquier alteración de los datos cifrados
Funcionamiento
- Al guardar una conexión Odoo, las credenciales sensibles se cifran del lado del servidor
- El resultado se almacena en formato
IV:TAG:CIPHERTEXT(hexadecimal) - En cada petición a Odoo, las credenciales se descifran en memoria durante la duración de la llamada
- La clave de cifrado es una variable de entorno del servidor, jamás expuesta del lado del cliente
Las credenciales Odoo nunca circulan en claro entre el navegador y el servidor MCP. Solo el backend dispone de la clave de descifrado.
Registro de las peticiones
Cada llamada MCP se registra con un nivel de detalle que permite una auditoría completa.
Datos registrados
| Campo | Descripción |
|---|---|
| Herramienta MCP | Nombre de la herramienta llamada (query, read, create, etc.) |
| Parámetros | Datos de entrada de la petición |
| Resultado | Datos de salida (éxito) o mensaje de error |
| Estado | success, error o timeout |
| Duración | Tiempo de ejecución en milisegundos |
| Usuario | Identidad del usuario y clave API utilizada |
| Sesión | Identificador de sesión para agrupar llamadas relacionadas |
Retención de los datos
Los logs se eliminan automáticamente al cabo de 90 días mediante un índice TTL de MongoDB. Esta duración permite un histórico suficiente para la auditoría a la vez que respeta los principios de minimización de datos.
Filtrado y consulta
Desde la página Logs del panel, puedes filtrar por:
- Herramienta MCP utilizada
- Estado de la petición (éxito, error, timeout)
- Usuario
- Rango de fechas
Los owners y admins consultan todos los logs de la empresa. Los members solo ven sus propias peticiones.
Recomendaciones
- Clave de cifrado: utiliza una clave de 32 caracteres aleatorios para
ENCRYPTION_KEY - Rotación de tokens: los access tokens JWT expiran automáticamente cada 15 minutos
- Permisos mínimos: asigna únicamente los permisos necesarios a cada clave API
- Supervisión: revisa regularmente los logs para detectar cualquier actividad inusual
- Revocación rápida: en caso de sospecha de compromiso, revoca inmediatamente la clave afectada