<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Resource-Indicators on Sauvik Biswas</title>
    <link>https://sauvikbiswas.com/tags/resource-indicators/</link>
    <description>Recent content in Resource-Indicators on Sauvik Biswas</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Fri, 26 Jun 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://sauvikbiswas.com/tags/resource-indicators/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Resource Indicators: Binding Tokens to a Specific API</title>
      <link>https://sauvikbiswas.com/posts/learning-oauth-2-09/</link>
      <pubDate>Fri, 26 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://sauvikbiswas.com/posts/learning-oauth-2-09/</guid>
      <description>&lt;h2 class=&#34;heading&#34; id=&#34;why-a-generic-access-token-is-not-enough&#34;&gt;&#xA;  Why a generic access token is not enough&#xA;  &lt;a class=&#34;anchor&#34; href=&#34;#why-a-generic-access-token-is-not-enough&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://sauvikbiswas.com/posts/learning-oauth-2-08/&#34;&gt;v08&lt;/a&gt; replaced the shared &lt;code&gt;JWT_SECRET&lt;/code&gt; with RS256 + JWKS. Verifiers fetch public keys and check signatures. That fixed the question of who can forge tokens.&lt;/p&gt;&#xA;&lt;p&gt;It did not fix the question of where a token may be used.&lt;/p&gt;&#xA;&lt;p&gt;In v08, Mode B access tokens carry a hard-coded audience:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;&amp;#34;aud&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;resource-server&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;&amp;#34;iss&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;auth-server&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;&amp;#34;sub&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;user0&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;That string is a lab placeholder, not a real resource binding. Any API that knows to expect &lt;code&gt;aud: resource-server&lt;/code&gt; would accept the token. In production there can be dozens of APIs behind one IdP (payments, calendar, internal admin tools), each with its own canonical URI. A token minted for one API should not work against another, even when both trust the same issuer.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
