<?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/id/tags/oauth/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>id</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/id/tags/oauth/index.xml" rel="self" type="application/rss+xml"/><item><title>Agen AI Anda Punya Masalah Identitas (Dan Ini Template yang Mengatasinya)</title><link>https://thedotnetblog.com/id/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/id/news/emiliano-montesdeoca/azd-least-privilege-ai-agents-oauth-token-pattern/</guid><description>Template azd baru dari Curity dan Microsoft menunjukkan cara membangun agen AI yang menggunakan token OAuth berumur pendek dengan scope yang granular — sehingga agen tidak pernah bisa melihat data yang tidak seharusnya mereka lihat.</description><content:encoded>&lt;p&gt;Ada momen dalam setiap proyek agen AI yang berjalan kurang lebih seperti ini: demo berjalan sempurna, agen menginterpretasikan bahasa alami, memanggil API yang tepat, mengembalikan data yang tepat. Kemudian Anda mulai memikirkan pengguna nyata.&lt;/p&gt;
&lt;p&gt;Apa yang mencegah sesi agen satu pengguna dari melihat data pengguna lain? Bagaimana jika agen ditipu melalui injeksi prompt? Bagaimana jika agen memanggil sebuah tool dengan cara yang tidak terduga?&lt;/p&gt;
&lt;p&gt;Ini bukan edge case. Ini adalah keputusan desain yang perlu Anda buat sebelum rilis.&lt;/p&gt;
&lt;p&gt;Template &lt;code&gt;azd&lt;/code&gt; baru dari Curity dan Microsoft memberi Anda referensi yang bekerja persis untuk masalah ini.&lt;/p&gt;
&lt;h2 id="masalah-inti-autentikasi--otorisasi"&gt;Masalah Inti: Autentikasi ≠ Otorisasi&lt;/h2&gt;
&lt;p&gt;Sebagian besar sampel agen menangani autentikasi pengguna dengan baik. Mereka menangani otorisasi dengan buruk. Mengetahui &lt;em&gt;siapa&lt;/em&gt; pengguna tidak memberi tahu Anda &lt;em&gt;data apa&lt;/em&gt; yang seharusnya mereka lihat.&lt;/p&gt;
&lt;p&gt;Aplikasi klien tradisional melakukan panggilan API yang dapat diprediksi. Agen AI bersifat non-deterministik — ia menginterpretasikan bahasa alami dan memutuskan apa yang akan dipanggil. Ia bisa kreatif. Ia juga bisa salah. Dan jika dimanipulasi melalui injeksi prompt, Anda memerlukan aturan yang tidak bergantung pada AI yang berperilaku baik.&lt;/p&gt;
&lt;p&gt;Solusi yang didemonstrasikan template ini: &lt;strong&gt;token berumur pendek yang membawa informasi yang tepat untuk setiap hop&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="cara-kerja-rantai-token"&gt;Cara Kerja Rantai Token&lt;/h2&gt;
&lt;p&gt;Template menggunakan token akses OAuth 2.0 dengan pertukaran token untuk mempersempit izin di setiap langkah. Token pengguna dipertukarkan dua kali sebelum mencapai server MCP:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Pertukaran pertama&lt;/strong&gt; — mempersempit scope dan mengonversi token buram menjadi JWT&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pertukaran kedua&lt;/strong&gt; — menambahkan identitas agen dan audiens baru untuk hop server MCP&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Tampilan token server 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;&lt;code&gt;customer_id&lt;/code&gt; disematkan dalam token oleh server otorisasi, bukan diteruskan sebagai parameter yang dikendalikan agen. API memeriksa token, bukan instruksi agen.&lt;/p&gt;
&lt;p&gt;Artinya: bahkan jika seseorang menipu agen untuk mencoba mengambil data pelanggan lain, token tidak akan mengotorisasinya.&lt;/p&gt;
&lt;h2 id="apa-yang-dideploy-template"&gt;Apa yang Dideploy Template&lt;/h2&gt;
&lt;p&gt;Dengan beberapa perintah &lt;code&gt;azd&lt;/code&gt; Anda mendapatkan:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Agen backend di Microsoft Foundry (C#, Microsoft A2A dan MCP SDK)&lt;/li&gt;
&lt;li&gt;Server MCP yang mengekspos API portofolio sampel&lt;/li&gt;
&lt;li&gt;Curity Identity Server sebagai server otorisasi, bersama Entra ID untuk autentikasi&lt;/li&gt;
&lt;li&gt;Gateway API eksternal dan internal yang menangani pertukaran token dan logging audit&lt;/li&gt;
&lt;li&gt;Bicep untuk semua infrastruktur Azure: Container Apps, VNet, ACR, Azure AI Foundry, Key Vault, Azure SQL Database, storage&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Seluruh pola dapat diinspeksi dan dikustomisasi.&lt;/p&gt;
&lt;h2 id="prinsip-desain-yang-layak-dipinjam"&gt;Prinsip Desain yang Layak Dipinjam&lt;/h2&gt;
&lt;p&gt;Bahkan jika Anda tidak menggunakan Curity, polanya dapat ditransfer: &lt;strong&gt;agen seharusnya tidak pernah memiliki akses API permanen&lt;/strong&gt;. Setiap tindakan harus menggunakan token berumur pendek dengan scope minimum yang diperlukan untuk panggilan spesifik tersebut, diterbitkan untuk identitas agen spesifik, membawa klaim yang dibutuhkan API untuk membuat keputusan otorisasi.&lt;/p&gt;
&lt;p&gt;Ini tahan terhadap agen yang kreatif, kesalahan, dan injeksi prompt dengan cara yang &amp;ldquo;pastikan saja agen tidak melakukan hal buruk&amp;rdquo; tidak akan pernah bisa.&lt;/p&gt;
&lt;h2 id="kesimpulan"&gt;Kesimpulan&lt;/h2&gt;
&lt;p&gt;Pola keamanan untuk agen AI masih sedang dirumuskan di seluruh industri. Template ini adalah salah satu implementasi referensi paling lengkap yang pernah saya lihat — ini mencakup alur otorisasi yang sebenarnya, bukan hanya autentikasi.&lt;/p&gt;
&lt;p&gt;Postingan asli: &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>