<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>OAuth | The .NET Blog</title><link>https://thedotnetblog.com/es/tags/oauth/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>es</language><managingEditor>@thedotnetblog (The .NET Blog)</managingEditor><webMaster>@thedotnetblog</webMaster><lastBuildDate>Wed, 20 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://thedotnetblog.com/es/tags/oauth/index.xml" rel="self" type="application/rss+xml"/><item><title>Tu Agente de IA Tiene un Problema de Identidad (Y Aquí Está la Plantilla que lo Resuelve)</title><link>https://thedotnetblog.com/es/news/emiliano-montesdeoca/azd-least-privilege-ai-agents-oauth-token-pattern/</link><pubDate>Wed, 20 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/es/news/emiliano-montesdeoca/azd-least-privilege-ai-agents-oauth-token-pattern/</guid><description>Una nueva plantilla azd de Curity y Microsoft muestra cómo construir agentes de IA que usan tokens OAuth de corta duración con ámbitos de grano fino — para que los agentes nunca puedan ver datos que no deberían ver.</description><content:encoded>&lt;p&gt;Hay un momento en cada proyecto de agente de IA que va más o menos así: la demo funciona perfectamente, el agente interpreta el lenguaje natural, llama a las API correctas, devuelve los datos correctos. Entonces empiezas a pensar en los usuarios reales.&lt;/p&gt;
&lt;p&gt;¿Qué impide que la sesión del agente de un usuario vea los datos de otro usuario? ¿Qué pasa si el agente es engañado a través de inyección de prompts? ¿Qué pasa si llama a una herramienta de una manera inesperada?&lt;/p&gt;
&lt;p&gt;Estos no son casos extremos. Son decisiones de diseño que debes tomar antes de lanzar.&lt;/p&gt;
&lt;p&gt;Una nueva plantilla &lt;code&gt;azd&lt;/code&gt; de Curity y Microsoft te da una referencia funcional para exactamente este problema.&lt;/p&gt;
&lt;h2 id="el-problema-central-autenticación--autorización"&gt;El Problema Central: Autenticación ≠ Autorización&lt;/h2&gt;
&lt;p&gt;La mayoría de las muestras de agentes gestionan bien la autenticación de usuarios. Gestionan mal la autorización. Saber &lt;em&gt;quién&lt;/em&gt; es el usuario no te dice &lt;em&gt;qué datos&lt;/em&gt; debería ver.&lt;/p&gt;
&lt;p&gt;Una aplicación cliente tradicional hace llamadas de API predecibles. Un agente de IA es no determinista — interpreta el lenguaje natural y decide a quién llamar. Puede ser creativo. También puede estar equivocado. Y si es manipulado a través de inyección de prompts, necesitas reglas que no dependan de que la IA se comporte bien.&lt;/p&gt;
&lt;p&gt;La solución que demuestra esta plantilla: &lt;strong&gt;tokens de corta duración que transportan exactamente la información correcta para cada salto&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="cómo-funciona-la-cadena-de-tokens"&gt;Cómo Funciona la Cadena de Tokens&lt;/h2&gt;
&lt;p&gt;La plantilla usa tokens de acceso OAuth 2.0 con intercambio de tokens para reducir los permisos en cada paso. Un token de usuario se intercambia dos veces antes de llegar al servidor MCP:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Primer intercambio&lt;/strong&gt; — reduce el ámbito y convierte el token opaco en un JWT&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Segundo intercambio&lt;/strong&gt; — añade la identidad del agente y una nueva audiencia para el salto del servidor MCP&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Cómo luce el token del servidor MCP:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;scope&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;stocks/read&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;sub&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;62c839b8...&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;aud&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://mcp.demo.example&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;customer_id&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;178&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;region&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;USA&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;El &lt;code&gt;customer_id&lt;/code&gt; está integrado en el token por el servidor de autorización, no se pasa como un parámetro que controla el agente. La API comprueba el token, no las instrucciones del agente.&lt;/p&gt;
&lt;p&gt;Esto significa: incluso si alguien engaña al agente para que intente obtener los datos de otro cliente, el token no lo autorizará.&lt;/p&gt;
&lt;h2 id="qué-despliega-la-plantilla"&gt;Qué Despliega la Plantilla&lt;/h2&gt;
&lt;p&gt;Con unos pocos comandos &lt;code&gt;azd&lt;/code&gt; obtienes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Un agente backend en Microsoft Foundry (C#, SDK de Microsoft A2A y MCP)&lt;/li&gt;
&lt;li&gt;Un servidor MCP que expone una API de cartera de muestra&lt;/li&gt;
&lt;li&gt;Curity Identity Server como servidor de autorización, junto con Entra ID para la autenticación&lt;/li&gt;
&lt;li&gt;Pasarelas de API externas e internas que gestionan el intercambio de tokens y el registro de auditoría&lt;/li&gt;
&lt;li&gt;Bicep para toda la infraestructura Azure: Container Apps, VNet, ACR, Azure AI Foundry, Key Vault, Azure SQL Database, almacenamiento&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Todo el patrón es inspeccionable y personalizable.&lt;/p&gt;
&lt;h2 id="el-principio-de-diseño-que-vale-la-pena-adoptar"&gt;El Principio de Diseño que Vale la Pena Adoptar&lt;/h2&gt;
&lt;p&gt;Incluso si no usas Curity, el patrón es transferible: &lt;strong&gt;los agentes nunca deberían tener acceso permanente a la API&lt;/strong&gt;. Cada acción debería usar un token de corta duración con el mínimo ámbito necesario para esa llamada específica, emitido para la identidad específica del agente, llevando las afirmaciones que la API necesita para tomar decisiones de autorización.&lt;/p&gt;
&lt;p&gt;Esto resiste agentes creativos, errores e inyección de prompts de maneras que &amp;ldquo;asegúrate de que el agente no haga cosas malas&amp;rdquo; nunca lo hará.&lt;/p&gt;
&lt;h2 id="conclusión"&gt;Conclusión&lt;/h2&gt;
&lt;p&gt;Los patrones de seguridad para agentes de IA todavía se están definiendo en toda la industria. Esta plantilla es una de las implementaciones de referencia más completas que he visto — cubre el flujo de autorización real, no solo la autenticación.&lt;/p&gt;
&lt;p&gt;Post original: &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-curity-least-privilege-ai-agents/"&gt;Least privilege AI agents: A new azd template from Curity and Microsoft&lt;/a&gt;&lt;/p&gt;</content:encoded></item></channel></rss>