Agent Guardrails and Runtime LDAP Config

Oggi ho lavorato su due problemi diversi. Entrambi avevano lo stesso obiettivo: rendere i confini espliciti e facili da controllare.

Il primo compito consisteva nel costruire strumenti MCP per un agente AI. Volevo che l'agente gestisse una piattaforma di eventi elencando gli eventi, verificandone la prontezza e pubblicando aggiornamenti.

La sfida è che gli strumenti MCP utilizzano l'autenticazione tramite token. Ciò significa che mancano del contesto di sessione tipico di una normale richiesta web. Se ci si affida a uno scope globale del tenant, il sistema potrebbe restituire dati di ogni organizzazione.

Ho risolto il problema con tre regole:

  • Filtrare esplicitamente per organizzazione in ogni query. Non fare affidamento su uno scope globale.
  • Utilizzare le stesse stringhe di autorizzazione dell'app web. Un agente non dovrebbe mai avere più potere dell'essere umano che lo utilizza.
  • Utilizzare gli UUID per le ricerche invece di ID auto-incrementanti.

Tratta ogni strumento come un endpoint non attendibile. Inserisci la logica in un unico punto dove sia possibile testarla.

Il secondo compito riguardava un portale di identità. Ho spostato le impostazioni LDAP dai file statici a un'interfaccia utente per le impostazioni. Gli amministratori possono ora modificare host, porta e credenziali senza dover effettuare un nuovo deployment.

Ho anche aggiunto il controllo sui timeout di connessione e sulle opzioni SASL. Questo ha creato un ostacolo tecnico con JSON.

Quando si memorizzano chiavi intere in JSON, queste vengono restituite come stringhe durante la decodifica. Le funzioni LDAP richiedono chiavi intere. Ho dovuto scrivere un mapper per riconvertire quelle chiavi in interi prima dell'uso.

Per garantire la sicurezza, ho aggiunto due guardrail:

  • Crittografare le password di bind a riposo. Non inserire mai segreti nella cache in chiaro.
  • Validare i campi JSON prima del salvataggio. Una configurazione errata dovrebbe fallire durante la fase di salvataggio, non quando un utente viene bloccato fuori dal sistema.

Ho anche utilizzato un unico assembler sia per testare che per salvare le connessioni. Ciò garantisce che la connessione testata sia esattamente quella salvata.

L'ingegneria non consiste nel costruire la funzionalità. L'ingegneria consiste nel costruire i guardrail.

Fonte: https://dev.to/nasrulhazim/dev-log-2026-06-24-agent-guardrails-and-runtime-ldap-config-2hi5