<?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/nl/tags/oauth/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>nl</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/nl/tags/oauth/index.xml" rel="self" type="application/rss+xml"/><item><title>Uw AI-agent heeft een identiteitsprobleem (en dit is de template die het oplost)</title><link>https://thedotnetblog.com/nl/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/nl/news/emiliano-montesdeoca/azd-least-privilege-ai-agents-oauth-token-pattern/</guid><description>Een nieuwe azd-template van Curity en Microsoft laat zien hoe je AI-agents bouwt die kortlevende OAuth-tokens gebruiken met gedetailleerde scopes — zodat agents nooit gegevens kunnen zien die ze niet zouden moeten zien.</description><content:encoded>&lt;p&gt;In elk AI-agentproject is er een moment dat ongeveer zo verloopt: de demo werkt perfect, de agent interpreteert natuurlijke taal, roept de juiste API&amp;rsquo;s aan, geeft de juiste gegevens terug. Dan begint u aan echte gebruikers te denken.&lt;/p&gt;
&lt;p&gt;Wat verhindert dat de agentsessie van één gebruiker de gegevens van een andere gebruiker ziet? Wat als de agent wordt misleid via promptinjectie? Wat als hij een tool op een onverwachte manier aanroept?&lt;/p&gt;
&lt;p&gt;Dit zijn geen randgevallen. Dit zijn ontwerpbeslissingen die u vóór de release moet nemen.&lt;/p&gt;
&lt;p&gt;Een nieuwe &lt;code&gt;azd&lt;/code&gt;-template van Curity en Microsoft geeft u een werkende referentie voor precies dit probleem.&lt;/p&gt;
&lt;h2 id="het-kernprobleem-authenticatie--autorisatie"&gt;Het kernprobleem: Authenticatie ≠ Autorisatie&lt;/h2&gt;
&lt;p&gt;De meeste agentsamples gaan goed om met gebruikersauthenticatie. Ze gaan slecht om met autorisatie. Weten &lt;em&gt;wie&lt;/em&gt; de gebruiker is, vertelt u niet &lt;em&gt;welke gegevens&lt;/em&gt; ze zouden moeten zien.&lt;/p&gt;
&lt;p&gt;Een traditionele clientapp maakt voorspelbare API-aanroepen. Een AI-agent is niet-deterministisch — hij interpreteert natuurlijke taal en beslist wat hij aanroept. Hij kan creatief zijn. Hij kan ook ongelijk hebben. En als hij via promptinjectie wordt gemanipuleerd, hebt u regels nodig die niet afhankelijk zijn van goed gedrag van de AI.&lt;/p&gt;
&lt;p&gt;De oplossing die deze template demonstreert: &lt;strong&gt;kortlevende tokens die precies de juiste informatie bij elke hop dragen&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="hoe-de-tokenketen-werkt"&gt;Hoe de tokenketen werkt&lt;/h2&gt;
&lt;p&gt;De template gebruikt OAuth 2.0-toegangstokens met tokenuitwisseling om machtigingen bij elke stap te beperken. Het gebruikerstoken wordt twee keer uitgewisseld voordat het de MCP-server bereikt:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Eerste uitwisseling&lt;/strong&gt; — versmalt de scope en converteert het ondoorzichtige token naar een JWT&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tweede uitwisseling&lt;/strong&gt; — voegt agentidentiteit en een nieuw publiek toe voor de MCP-server hop&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Hoe het MCP-servertoken eruit ziet:&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;&lt;code&gt;customer_id&lt;/code&gt; wordt door de autorisatieserver in het token ingebed, niet doorgegeven als een parameter die de agent beheert. De API controleert het token, niet de instructies van de agent.&lt;/p&gt;
&lt;p&gt;Dat betekent: zelfs als iemand de agent misleidt om gegevens van een andere klant op te halen, zal het token dat niet autoriseren.&lt;/p&gt;
&lt;h2 id="wat-de-template-implementeert"&gt;Wat de template implementeert&lt;/h2&gt;
&lt;p&gt;Met een paar &lt;code&gt;azd&lt;/code&gt;-commando&amp;rsquo;s krijgt u:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Een backend-agent op Microsoft Foundry (C#, Microsoft A2A- en MCP-SDK&amp;rsquo;s)&lt;/li&gt;
&lt;li&gt;Een MCP-server die een voorbeeld portfolio-API blootstelt&lt;/li&gt;
&lt;li&gt;Curity Identity Server als autorisatieserver, samen met Entra ID voor authenticatie&lt;/li&gt;
&lt;li&gt;Externe en interne API-gateways die tokenuitwisseling en auditlogging afhandelen&lt;/li&gt;
&lt;li&gt;Bicep voor alle Azure-infrastructuur: Container Apps, VNet, ACR, Azure AI Foundry, Key Vault, Azure SQL Database, opslag&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Het volledige patroon is inspecteerbaar en aanpasbaar.&lt;/p&gt;
&lt;h2 id="het-ontwerpprincipe-dat-het-waard-is-te-lenen"&gt;Het ontwerpprincipe dat het waard is te lenen&lt;/h2&gt;
&lt;p&gt;Zelfs als u Curity niet gebruikt, is het patroon overdraagbaar: &lt;strong&gt;agents mogen nooit permanente API-toegang hebben&lt;/strong&gt;. Elke actie zou een kortlevend token moeten gebruiken met de minimale scope die nodig is voor die specifieke aanroep, uitgegeven voor de specifieke agentidentiteit, met de claims die de API nodig heeft om autorisatiebeslissingen te nemen.&lt;/p&gt;
&lt;p&gt;Dit bestand het tegen creatieve agents, fouten en promptinjectie op manieren die &amp;ldquo;zorg er gewoon voor dat de agent geen slechte dingen doet&amp;rdquo; nooit zal.&lt;/p&gt;
&lt;h2 id="conclusie"&gt;Conclusie&lt;/h2&gt;
&lt;p&gt;Beveiligingspatronen voor AI-agents worden nog steeds in de gehele industrie uitgewerkt. Deze template is een van de meest complete referentie-implementaties die ik heb gezien — het behandelt de daadwerkelijke autorisatiestroom, niet alleen authenticatie.&lt;/p&gt;
&lt;p&gt;Originele post: &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>