Protecciones para agentes y configuración de LDAP en tiempo de ejecución
Hoy trabajé en dos problemas diferentes. Ambos tenían el mismo objetivo: hacer que los límites fueran explícitos y fáciles de controlar.
La primera tarea consistió en construir herramientas MCP para un agente de IA. Quería que el agente gestionara una plataforma de eventos listando eventos, comprobando la disponibilidad y publicando actualizaciones.
El desafío es que las herramientas MCP utilizan autenticación por token. Esto significa que carecen del contexto de sesión que tiene una solicitud web estándar. Si se depende de un alcance de tenant global, el sistema podría devolver datos de todas las organizaciones.
Resolví esto con tres reglas:
- Filtrar explícitamente por organización en cada consulta. No depender de un alcance global.
- Usar las mismas cadenas de permisos que la aplicación web. Un agente nunca debe tener más poder que el humano que lo utiliza.
- Usar UUIDs para las búsquedas en lugar de IDs de autoincremento.
Trata cada herramienta como un endpoint no confiable. Coloca tu lógica donde puedas probarla en un solo lugar.
La segunda tarea involucró un portal de identidad. Moví la configuración de LDAP de archivos estáticos a una interfaz de configuración. Ahora los administradores pueden cambiar el host, el puerto y las credenciales sin necesidad de un nuevo despliegue.
También añadí control sobre los tiempos de espera de conexión y las opciones SASL. Esto creó un obstáculo técnico con JSON.
Cuando almacenas claves de tipo entero en JSON, estas se devuelven como cadenas de texto al decodificarlas. Las funciones de LDAP requieren claves enteras. Tuve que escribir un mapeador para convertir esas claves de nuevo a enteros antes de su uso.
Para mantener esto seguro, añadí dos protecciones:
- Cifrar las contraseñas de bind en reposo. Nunca guardes secretos en la caché como texto plano.
- Validar los campos JSON antes de guardar. Una configuración incorrecta debería fallar en el paso de guardado, no cuando un usuario se quede bloqueado.
También utilicé un único ensamblador tanto para probar como para guardar las conexiones. Esto garantiza que la conexión que pruebas es exactamente la que guardas.
La ingeniería no consiste en construir la funcionalidad. La ingeniería consiste en construir las protecciones.
Fuente: https://dev.to/nasrulhazim/dev-log-2026-06-24-agent-guardrails-and-runtime-ldap-config-2hi5
