Por qué los agentes necesitan autenticación
Cuando un agente de IA llama a un servicio externo — una base de datos, una API de terceros, una función en la nube — debe demostrar quién es. Esa demostración adopta dos formas comunes: una clave de API estática (una cadena larga y aleatoria que el servicio te emite una vez) o un token de corta duración emitido mediante OAuth 2.0 (un protocolo donde el agente intercambia credenciales por un token de acceso limitado en el tiempo). Ambos cumplen el mismo propósito: el servidor remoto verifica la credencial y luego decide si atiende la solicitud.
El peligro no es la credencial en sí — es lo que ocurre cuando la credencial se filtra. Una clave de API filtrada en un chat log, una traza de error o un prompt enviado a un LLM puede ser rastreada y explotada en cuestión de minutos. Tratar los secretos con tanto cuidado como tratarías la contraseña de una base de datos en producción es la expectativa mínima.
Dónde almacenar los secretos
Nunca hard-codees credenciales en archivos de código fuente. Nunca las pegues en una plantilla de prompt. El patrón estándar es cargarlas desde variables de entorno en tiempo de ejecución, de modo que el secreto viva en el entorno de despliegue, no en el código base.
En este snippet la clave se lee desde el entorno, se adjunta como token Bearer en la cabecera HTTP, y nunca se escribe en disco ni se loguea. Si falta la variable de entorno, el agente debe fallar rápido con un error de inicio claro — no recurrir en silencio a un placeholder que enmascare la mala configuración.
Para desarrollo local, un archivo `.env` (un archivo de texto plano con pares clave=valor, excluido del control de versiones mediante `.gitignore`) funciona bien. Para producción, el orquestador o el gestor de secretos inyecta los valores. En cualquier caso, la regla es la misma: los secretos pertenecen fuera del código.
Tokens OAuth y flujo de refresco
Las claves estáticas son simples pero inflexibles. Los tokens OAuth son mejores cuando el agente actúa en nombre de un usuario — por ejemplo, leer su calendario o publicar en su cuenta. El flujo se ve así:
El agente debe almacenar el access token solo en memoria, y el refresh token en un almacén seguro. Cuando el access token expira (generalmente señalado por una respuesta 401), el agente lo reemplaza silenciosamente por uno nuevo usando el refresh token — el usuario nunca vuelve a dar su consentimiento. Encapsular la lógica de refresco en una pequeña función auxiliar mantiene limpio el código que la invoca.
Evitar fugas en prompts y logs
La fuga de credenciales más común en sistemas de agentes es el eco accidental: el agente incluye el secreto dentro de un prompt que envía al LLM, o un logger imprime la request completa incluidas las cabeceras. Ambos son fáciles de prevenir una vez que sabes dónde mirar.
La primera función filtra cualquier campo de contexto cuyo nombre indique un secreto. La segunda redacta la cabecera Authorization antes de imprimir. Aplica el mismo saneamiento a tracebacks, informes de errores y cualquier mensaje de error visible para el usuario — si un stack trace contiene un token, ya lo has perdido.
Resumen
Tres reglas cubren la mayor parte de la superficie. Primero, carga las credenciales desde el entorno, no desde el código ni los prompts. Segundo, prefiere tokens de corta duración sobre claves de larga duración siempre que el servicio soporte OAuth, y refréscalos automáticamente. Tercero, trata cada línea de log, cada mensaje de error y cada prompt como un vector potencial de fuga — redacta antes de escribir. Seguir estas tres reglas no hace que un sistema sea infalible, pero cierra las puertas por las que realmente entran los atacantes.
Punto de control de la lección
Repasa lo aprendido y recibe comentarios sobre tu trabajo.