<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.30 (Ruby 3.4.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-mcguinness-oauth-rfc9728bis-00" category="std" consensus="true" updates="9728" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="Updated PRM Resource Validation">Update to OAuth 2.0 Protected Resource Metadata Resource Identifier Validation</title>
    <seriesInfo name="Internet-Draft" value="draft-mcguinness-oauth-rfc9728bis-00"/>
    <author fullname="Karl McGuinness">
      <organization>Independent</organization>
      <address>
        <email>public@karlmcguinness.com</email>
      </address>
    </author>
    <author fullname="Aaron Parecki">
      <organization>Okta</organization>
      <address>
        <email>aaron.parecki@okta.com</email>
      </address>
    </author>
    <date year="2026" month="February" day="24"/>
    <area>Security</area>
    <workgroup>Web Authorization Protocol</workgroup>
    <keyword>OAuth 2.0</keyword>
    <keyword>Protected Resource Metadata</keyword>
    <keyword>Resource Indicator</keyword>
    <abstract>
      <?line 47?>

<t>RFC 9728 defines OAuth 2.0 Protected Resource Metadata, enabling clients to dynamically discover the authorization requirements of protected resources.  Section 3.3 of RFC 9728 requires that when protected resource metadata is obtained via a <tt>WWW-Authenticate</tt> challenge, the <tt>resource</tt> value in the metadata <bcp14>MUST</bcp14> exactly match the URL the client used to access the protected resource, limiting the applicability of the specification.</t>
      <t>This document updates the resource validation rule in Section 3.3 of RFC 9728 to permit the <tt>resource</tt> value to be any URI that shares the same TLS origin (scheme, host, and port) as the requested URL and whose path is a prefix of the request URL path. This enables a wider range of use cases for the <tt>WWW-Authenticate</tt> response. All other aspects of RFC 9728 remain unchanged.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://mcguinness.github.io/draft-mcguinness-oauth-rfc9728bis/draft-mcguinness-oauth-rfc9728bis.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-mcguinness-oauth-rfc9728bis/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Web Authorization Protocol Working Group mailing list (<eref target="mailto:oauth@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/oauth/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/oauth/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/mcguinness/draft-mcguinness-oauth-rfc9728bis"/>.</t>
    </note>
  </front>
  <middle>
    <?line 53?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>This document updates one specific aspect of OAuth 2.0 Protected Resource Metadata <xref target="RFC9728"/>: the resource validation rule defined in Section 3.3.</t>
      <t>Section 3.3 of <xref target="RFC9728"/> requires that when a client retrieves protected resource metadata from a URL obtained via a <tt>WWW-Authenticate</tt> challenge, the <tt>resource</tt> value in the metadata response <bcp14>MUST</bcp14> be identical to the URL the client used to make the request that triggered the challenge.  This exact-match rule is intended to prevent a malicious resource from directing clients to metadata that impersonates a different resource.</t>
      <t>Consider a resource server at <tt>https://api.example.com</tt> that exposes the following protected resources:</t>
      <ul spacing="normal">
        <li>
          <t><tt>https://api.example.com/accounts</tt></t>
        </li>
        <li>
          <t><tt>https://api.example.com/transactions</tt></t>
        </li>
        <li>
          <t><tt>https://api.example.com/profile</tt></t>
        </li>
      </ul>
      <t>All three protected resources are served by the same authorization server (<tt>https://as.example.com</tt>) and accept tokens with the same audience (<tt>https://api.example.com</tt>).</t>
      <t>Under the current Section 3.3 rule in <xref target="RFC9728"/>, when a client calls <tt>https://api.example.com/transactions</tt> without a token, the resource server responds:</t>
      <artwork><![CDATA[
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer resource_metadata="https://api.example.com/.well-known/oauth-protected-resource/transactions"
]]></artwork>
      <t>The client retrieves the metadata, which per Section 3.3 of <xref target="RFC9728"/> <bcp14>MUST</bcp14> contain a <tt>resource</tt> value identical to the request URL:</t>
      <sourcecode type="json"><![CDATA[
{
  "resource": "https://api.example.com/transactions",
  "authorization_servers": ["https://as.example.com"],
  ...
}
]]></sourcecode>
      <t>The client then requests a token using <tt>https://api.example.com/transactions</tt> as the <tt>resource</tt> parameter per <xref target="RFC8707"/>.  The authorization server may issue a token whose audience is <tt>https://api.example.com</tt> (covering all protected resources on the server), but the client has no standardized way to know this.</t>
      <t>When the client subsequently needs to access <tt>https://api.example.com/accounts</tt>, it faces one of the following suboptimal outcomes:</t>
      <ol spacing="normal" type="1"><li>
          <t>It repeats the entire discovery and token-request flow for the new protected resource, wasting a round trip to the authorization server.</t>
        </li>
        <li>
          <t>It speculatively reuses the existing token, which may work but is not grounded in any protocol signal from the resource server.</t>
        </li>
        <li>
          <t>The authorization server must understand and enumerate every per-URL resource identifier that maps to a given audience, increasing configuration complexity.</t>
        </li>
      </ol>
      <t>&lt;&lt;&lt;&lt;&lt;&lt;&lt; HEAD
To avoid these outcomes, this document relaxes the exact-match requirement for <tt>resource</tt> values obtained via <tt>WWW-Authenticate</tt> discovery to a same-origin, path-prefix match.  See <xref target="update-section-3-3"/> for the normative specification.
=======
To avoid these outcomes, this document relaxes the exact-match requirement for <tt>resource</tt> values obtained via WWW-Authenticate discovery to a same-origin, path-prefix match.  See <xref target="update-section-3-3"/> for the normative specification.  <xref target="appendix-fine-grained"/> provides a non-normative example illustrating how the updated rule applies to APIs with fine-grained resource URLs.
&gt;&gt;&gt;&gt;&gt;&gt;&gt; a5ec3a7 (added fine grained example)</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="terminology">
      <name>Terminology</name>
      <t>This document uses the following terms as defined in the referenced specifications:</t>
      <dl>
        <dt>resource identifier:</dt>
        <dd>
          <t>An HTTPS URI that identifies a protected resource or set of protected resources, as defined in Section 1.2 of <xref target="RFC9728"/> and <xref target="RFC8707"/>.</t>
        </dd>
        <dt>TLS origin:</dt>
        <dd>
          <t>The combination of scheme, host, and port derived from a URI, as defined in Section 4.3.2 of <xref target="RFC9110"/> for the <tt>https</tt> scheme. Two URIs share the same TLS origin if and only if their scheme, host, and port (after applying default port rules) are identical.</t>
        </dd>
        <dt>path prefix:</dt>
        <dd>
          <t>A path that matches the beginning of another path on a segment boundary.  See <xref target="path-prefix-matching"/> for the precise definition.</t>
        </dd>
        <dt>request URL:</dt>
        <dd>
          <t>The URL the client used to make the request that triggered the WWW-Authenticate challenge.</t>
        </dd>
      </dl>
    </section>
    <section anchor="update-section-3-3">
      <name>Update to RFC 9728 Section 3.3</name>
      <t>This section contains the normative change to <xref target="RFC9728"/>.  It updates only the resource validation rule in Section 3.3 of <xref target="RFC9728"/> that applies when metadata is retrieved via a <tt>WWW-Authenticate</tt> challenge.  All other requirements in Section 3.3 and the rest of <xref target="RFC9728"/> remain in effect.</t>
      <section anchor="original-rule-replaced">
        <name>Original Rule (Replaced)</name>
        <t>Section 3.3 of <xref target="RFC9728"/> states:</t>
        <ul empty="true">
          <li>
            <t>If the protected resource metadata was retrieved from a URL returned by the protected resource via the <tt>WWW-Authenticate</tt> <tt>resource_metadata</tt> parameter, then the <tt>resource</tt> value returned <bcp14>MUST</bcp14> be identical to the URL that the client used to make the request to the resource server. If these values are not identical, the data contained in the response <bcp14>MUST NOT</bcp14> be used.</t>
          </li>
        </ul>
        <t>This document replaces the above requirement with the updated rule in <xref target="updated-rule"/>.</t>
      </section>
      <section anchor="updated-rule">
        <name>Updated Validation Rule</name>
        <t>When a client retrieves protected resource metadata from a URL obtained via the <tt>resource_metadata</tt> parameter in a <tt>WWW-Authenticate</tt> challenge (as defined in Section 5 of <xref target="RFC9728"/>), the client <bcp14>MUST</bcp14> verify ALL of the following conditions using the <tt>resource</tt> value from the metadata response and the URL the client used to make the request that triggered the challenge:</t>
        <ol spacing="normal" type="1"><li>
            <t>The scheme of the <tt>resource</tt> value <bcp14>MUST</bcp14> be <tt>https</tt>.</t>
          </li>
          <li>
            <t>The host of the <tt>resource</tt> value <bcp14>MUST</bcp14> be identical (using case-insensitive comparison) to the host of the request URL.</t>
          </li>
          <li>
            <t>The port of the <tt>resource</tt> value <bcp14>MUST</bcp14> be identical to the port of the request URL.  If either URL omits the port, the default port for the <tt>https</tt> scheme (443) <bcp14>MUST</bcp14> be used for comparison.</t>
          </li>
          <li>
            <t>The path of the <tt>resource</tt> value <bcp14>MUST</bcp14> be a prefix of the path of the request URL, as defined in <xref target="path-prefix-matching"/>.</t>
          </li>
        </ol>
        <t>If any of these conditions are not met, the client <bcp14>MUST NOT</bcp14> use the metadata, consistent with the security requirements of <xref target="RFC9728"/>.</t>
        <t>Note that when the <tt>resource</tt> value is identical to the request URL, all four conditions are trivially satisfied.  This means the updated rule is fully backwards compatible with the original exact-match rule in <xref target="RFC9728"/>: any metadata that was valid under the original rule remains valid under this update.</t>
        <t>This update only applies to metadata retrieved via a <tt>WWW-Authenticate challenge</tt>. The validation rule for metadata retrieved directly from a well-known URI is NOT changed by this document; the <tt>resource</tt> value <bcp14>MUST</bcp14> still be identical to the resource identifier from which the well-known URI was derived, as specified in Section 3.3 of <xref target="RFC9728"/>.</t>
      </section>
      <section anchor="path-prefix-matching">
        <name>Path Prefix Matching</name>
        <t>This section defines the path prefix matching algorithm referenced by condition 4 of the updated validation rule in <xref target="updated-rule"/>.</t>
        <t>The path of the <tt>resource</tt> value is a prefix of the path of the request URL if any of the following conditions hold:</t>
        <ol spacing="normal" type="1"><li>
            <t>The paths are identical (exact match).</t>
          </li>
          <li>
            <t>The <tt>resource</tt> path ends with <tt>/</tt> and the request URL path starts with the <tt>resource</tt> path.  For example, a <tt>resource</tt> path of <tt>/api/v1/</tt> is a prefix of a request URL path of <tt>/api/v1/accounts</tt>.</t>
          </li>
          <li>
            <t>The <tt>resource</tt> path does not end with <tt>/</tt>, and the request URL path is the <tt>resource</tt> path followed by <tt>/</tt> and optionally additional segments.  For example, a <tt>resource</tt> path of <tt>/api/v1</tt> is a prefix of request URL paths <tt>/api/v1/</tt> and <tt>/api/v1/accounts</tt>.</t>
          </li>
        </ol>
        <t>Matching <bcp14>MUST</bcp14> occur on segment boundaries.  A <tt>resource</tt> path <bcp14>MUST NOT</bcp14> be treated as a prefix if the match would split a path segment. For example, a <tt>resource</tt> path of <tt>/api/v1</tt> <bcp14>MUST NOT</bcp14> match a request URL path of <tt>/api/v10</tt> or <tt>/api/v1admin</tt>, because <tt>v10</tt> and <tt>v1admin</tt> are distinct path segments from <tt>v1</tt>.</t>
        <t>Paths <bcp14>MUST</bcp14> be compared in their URI-normalized form per <xref target="RFC3986"/>. Percent-encoded characters <bcp14>MUST</bcp14> be decoded before comparison.  An empty or absent path <bcp14>MUST</bcp14> be treated as <tt>/</tt> for comparison purposes.</t>
        <t>The following table illustrates the matching behavior:</t>
        <table>
          <thead>
            <tr>
              <th align="left">resource path</th>
              <th align="left">Request URL path</th>
              <th align="left">Match?</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>/</tt></td>
              <td align="left">
                <tt>/</tt></td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">
                <tt>/</tt></td>
              <td align="left">
                <tt>/accounts</tt></td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">
                <tt>/</tt></td>
              <td align="left">
                <tt>/api/v1/accounts</tt></td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">
                <tt>/api</tt></td>
              <td align="left">
                <tt>/api/v1/accounts</tt></td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">
                <tt>/api/</tt></td>
              <td align="left">
                <tt>/api/v1/accounts</tt></td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">
                <tt>/api/v1</tt></td>
              <td align="left">
                <tt>/api/v1/accounts</tt></td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">
                <tt>/api/v1</tt></td>
              <td align="left">
                <tt>/api/v1/</tt></td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">
                <tt>/api/v1/</tt></td>
              <td align="left">
                <tt>/api/v1/accounts</tt></td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">
                <tt>/api/v1</tt></td>
              <td align="left">
                <tt>/api/v1</tt></td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">
                <tt>/api/v1</tt></td>
              <td align="left">
                <tt>/api/v10</tt></td>
              <td align="left">
                <strong>No</strong></td>
            </tr>
            <tr>
              <td align="left">
                <tt>/api/v1</tt></td>
              <td align="left">
                <tt>/api/v1admin</tt></td>
              <td align="left">
                <strong>No</strong></td>
            </tr>
            <tr>
              <td align="left">
                <tt>/api/v1</tt></td>
              <td align="left">
                <tt>/api/v2/accounts</tt></td>
              <td align="left">
                <strong>No</strong></td>
            </tr>
            <tr>
              <td align="left">
                <tt>/api/v1</tt></td>
              <td align="left">
                <tt>/other</tt></td>
              <td align="left">
                <strong>No</strong></td>
            </tr>
            <tr>
              <td align="left">
                <tt>/accounts</tt></td>
              <td align="left">
                <tt>/transactions</tt></td>
              <td align="left">
                <strong>No</strong></td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="examples">
      <name>Examples</name>
      <t>This section is non-normative.  It illustrates how the updated validation rule in <xref target="update-section-3-3"/> applies in practice.</t>
      <section anchor="host-level-resource-identifier">
        <name>Host-Level Resource Identifier</name>
        <t>A resource server at <tt>https://api.example.com</tt> advertises a host-level resource identifier covering all of its protected resources.</t>
        <t>When a client requests <tt>https://api.example.com/transactions</tt> without a token:</t>
        <artwork><![CDATA[
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer resource_metadata="https://api.example.com/.well-known/oauth-protected-resource"
]]></artwork>
        <t>The metadata response contains:</t>
        <sourcecode type="json"><![CDATA[
{
  "resource": "https://api.example.com/",
  "authorization_servers": ["https://as.example.com"],
  "scopes_supported": ["accounts.read", "transactions.read",
    "profile.read"]
  ...
}
]]></sourcecode>
        <t>The client validates that <tt>https://api.example.com/</tt> shares the same TLS origin as <tt>https://api.example.com/transactions</tt> and that the path <tt>/</tt> is a prefix of <tt>/transactions</tt>.</t>
      </section>
      <section anchor="path-level-resource-identifier">
        <name>Path-Level Resource Identifier</name>
        <t>A resource server at <tt>https://platform.example.com</tt> exposes two independent sets of protected resources under different path prefixes.</t>
        <t>When a client requests <tt>https://platform.example.com/api/v1/transactions</tt> without a token:</t>
        <artwork><![CDATA[
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer resource_metadata="https://platform.example.com/.well-known/oauth-protected-resource/api/v1"
]]></artwork>
        <t>The metadata response contains:</t>
        <sourcecode type="json"><![CDATA[
{
  "resource": "https://platform.example.com/api/v1",
  "authorization_servers": ["https://as.example.com"],
  "scopes_supported": ["transactions.read", "accounts.read"]
  ...
}
]]></sourcecode>
        <t>The client validates that <tt>https://platform.example.com/api/v1</tt> shares the same TLS origin as <tt>https://platform.example.com/api/v1/transactions</tt> and that the path <tt>/api/v1</tt> is a prefix of <tt>/api/v1/transactions</tt> on a segment boundary.</t>
        <t>A subsequent request to <tt>https://platform.example.com/api/v2/reports</tt> would NOT match the resource <tt>https://platform.example.com/api/v1</tt> because <tt>/api/v1</tt> is not a prefix of <tt>/api/v2/reports</tt>.  The client would need to perform a separate discovery for the <tt>/api/v2</tt> protected resources.</t>
      </section>
    </section>
    <section anchor="token-caching">
      <name>Client Token Caching Guidance</name>
      <t>This section is non-normative.</t>
      <t>A client <bcp14>MAY</bcp14> maintain a token cache keyed by the tuple <tt>(authorization_server, resource)</tt>, where <tt>authorization_server</tt> is the issuer identifier from which the token was obtained and <tt>resource</tt> is the <tt>resource</tt> value from the protected resource metadata.  A cached token <bcp14>MAY</bcp14> be reused for requests to any URL whose path falls under the same <tt>resource</tt> path prefix on the same TLS origin, provided the token was obtained from the same authorization server, has not expired, and carries sufficient scopes.</t>
      <t>A client <bcp14>MAY</bcp14> also optimistically reuse a cached token when accessing a URL under the same resource path prefix before performing metadata discovery for that URL.  If the resource server rejects the token (e.g., with a 401 response), the client falls back to the standard discovery flow.  The client should not assume that all protected resources under a given path prefix accept the same token.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The security considerations of <xref target="RFC9728"/> (Section 7) continue to apply in full.  This section describes how the updated validation rule in <xref target="update-section-3-3"/> interacts with those considerations.</t>
      <section anchor="preservation-of-origin-security-boundary">
        <name>Preservation of Origin Security Boundary</name>
        <t>Section 7.3 of <xref target="RFC9728"/> describes impersonation attacks where an adversary publishes metadata claiming to represent a legitimate resource.  The updated validation rule in <xref target="updated-rule"/> maintains the fundamental security property that prevents these attacks: the TLS origin check (conditions 1-3) ensures that the <tt>resource</tt> value is authoritative for the same server that issued the challenge.  An attacker who controls <tt>https://evil.example.com</tt> cannot cause a client to accept metadata with a <tt>resource</tt> value of <tt>https://api.example.com/</tt>, because the origins differ.</t>
      </section>
      <section anchor="path-level-isolation">
        <name>Path-Level Isolation</name>
        <t>Some deployments host multiple independent services on the same origin, distinguished only by path (e.g., a shared hosting environment where <tt>https://shared.example.com/serviceA</tt> and <tt>https://shared.example.com/serviceB</tt> are operated by different tenants).  The path-prefix matching rule in this document supports these deployments: each service can advertise its own path-scoped resource identifier (e.g., <tt>https://shared.example.com/serviceA</tt>) that covers only protected resources under that path prefix.</t>
        <t>Resource servers in multi-tenant environments <bcp14>SHOULD</bcp14> use path-specific resource identifiers that maintain the necessary isolation between tenants.  A resource identifier of <tt>https://shared.example.com/serviceA</tt> will not match requests to <tt>https://shared.example.com/serviceB/resource</tt> because <tt>/serviceA</tt> is not a path prefix of <tt>/serviceB/resource</tt>.  This ensures that tokens obtained for one service cannot be inadvertently reused for another service on the same origin.</t>
      </section>
      <section anchor="token-scope-and-audience">
        <name>Token Scope and Audience</name>
        <t>Relaxing the resource matching rule does not change the authorization server's responsibility to enforce audience restrictions on issued tokens.  The authorization server remains the authority on what resource(s) a token is valid for.  A client's use of a resource identifier (whether host-level or path-scoped) as the <tt>resource</tt> parameter in a token request is a signal to the authorization server, which <bcp14>MAY</bcp14> issue a token with a narrower or broader audience at its discretion.</t>
      </section>
      <section anchor="sender-constrained-tokens">
        <name>Sender-Constrained Tokens</name>
        <t>Deployments using sender-constrained tokens (e.g., DPoP <xref target="RFC9449"/>) are compatible with the relaxed matching rule defined in this document.  The sender constraint binds the token to the client, not to a specific protected resource, so token reuse across protected resources on the same origin does not weaken the sender-constraint security property.</t>
      </section>
      <section anchor="metadata-substitution-within-an-origin">
        <name>Metadata Substitution Within an Origin</name>
        <t>The updated validation rule in <xref target="updated-rule"/> permits a protected resource to direct clients to metadata with a <tt>resource</tt> value that differs from the URL of the protected resource (but shares the same origin and satisfies the path-prefix condition).  This means that a compromised protected resource on an origin could direct clients to metadata controlled by another protected resource on the same origin. This risk is inherent to same-origin trust and is no different from the existing web security model, where all content on the same origin shares a trust boundary.  This risk also exists under the original <xref target="RFC9728"/> rule, since a compromised protected resource can already return arbitrary WWW-Authenticate challenges.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC3986" target="https://www.rfc-editor.org/info/rfc3986" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3986.xml">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="L. Masinter" initials="L." surname="Masinter"/>
            <date month="January" year="2005"/>
            <abstract>
              <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
          <seriesInfo name="DOI" value="10.17487/RFC3986"/>
        </reference>
        <reference anchor="RFC6750" target="https://www.rfc-editor.org/info/rfc6750" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6750.xml">
          <front>
            <title>The OAuth 2.0 Authorization Framework: Bearer Token Usage</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="D. Hardt" initials="D." surname="Hardt"/>
            <date month="October" year="2012"/>
            <abstract>
              <t>This specification describes how to use bearer tokens in HTTP requests to access OAuth 2.0 protected resources. Any party in possession of a bearer token (a "bearer") can use it to get access to the associated resources (without demonstrating possession of a cryptographic key). To prevent misuse, bearer tokens need to be protected from disclosure in storage and in transport. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6750"/>
          <seriesInfo name="DOI" value="10.17487/RFC6750"/>
        </reference>
        <reference anchor="RFC8707" target="https://www.rfc-editor.org/info/rfc8707" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8707.xml">
          <front>
            <title>Resource Indicators for OAuth 2.0</title>
            <author fullname="B. Campbell" initials="B." surname="Campbell"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="February" year="2020"/>
            <abstract>
              <t>This document specifies an extension to the OAuth 2.0 Authorization Framework defining request parameters that enable a client to explicitly signal to an authorization server about the identity of the protected resource(s) to which it is requesting access.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8707"/>
          <seriesInfo name="DOI" value="10.17487/RFC8707"/>
        </reference>
        <reference anchor="RFC9110" target="https://www.rfc-editor.org/info/rfc9110" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9110.xml">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="RFC9449" target="https://www.rfc-editor.org/info/rfc9449" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9449.xml">
          <front>
            <title>OAuth 2.0 Demonstrating Proof of Possession (DPoP)</title>
            <author fullname="D. Fett" initials="D." surname="Fett"/>
            <author fullname="B. Campbell" initials="B." surname="Campbell"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="T. Lodderstedt" initials="T." surname="Lodderstedt"/>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="D. Waite" initials="D." surname="Waite"/>
            <date month="September" year="2023"/>
            <abstract>
              <t>This document describes a mechanism for sender-constraining OAuth 2.0 tokens via a proof-of-possession mechanism on the application level. This mechanism allows for the detection of replay attacks with access and refresh tokens.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9449"/>
          <seriesInfo name="DOI" value="10.17487/RFC9449"/>
        </reference>
        <reference anchor="RFC9728" target="https://www.rfc-editor.org/info/rfc9728" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9728.xml">
          <front>
            <title>OAuth 2.0 Protected Resource Metadata</title>
            <author fullname="M.B. Jones" initials="M.B." surname="Jones"/>
            <author fullname="P. Hunt" initials="P." surname="Hunt"/>
            <author fullname="A. Parecki" initials="A." surname="Parecki"/>
            <date month="April" year="2025"/>
            <abstract>
              <t>This specification defines a metadata format that an OAuth 2.0 client or authorization server can use to obtain the information needed to interact with an OAuth 2.0 protected resource.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9728"/>
          <seriesInfo name="DOI" value="10.17487/RFC9728"/>
        </reference>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC6749" target="https://www.rfc-editor.org/info/rfc6749" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6749.xml">
          <front>
            <title>The OAuth 2.0 Authorization Framework</title>
            <author fullname="D. Hardt" initials="D." role="editor" surname="Hardt"/>
            <date month="October" year="2012"/>
            <abstract>
              <t>The OAuth 2.0 authorization framework enables a third-party application to obtain limited access to an HTTP service, either on behalf of a resource owner by orchestrating an approval interaction between the resource owner and the HTTP service, or by allowing the third-party application to obtain access on its own behalf. This specification replaces and obsoletes the OAuth 1.0 protocol described in RFC 5849. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6749"/>
          <seriesInfo name="DOI" value="10.17487/RFC6749"/>
        </reference>
        <reference anchor="I-D.mcguinness-oauth-resource-token-resp" target="https://datatracker.ietf.org/doc/html/draft-mcguinness-oauth-resource-token-resp-01" xml:base="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.mcguinness-oauth-resource-token-resp.xml">
          <front>
            <title>OAuth 2.0 Resource Parameter in Access Token Response</title>
            <author fullname="Karl McGuinness" initials="K." surname="McGuinness">
              <organization>Independent</organization>
            </author>
            <author fullname="Jared Hanson" initials="J." surname="Hanson">
              <organization>Keycard Labs</organization>
            </author>
            <date day="21" month="December" year="2025"/>
            <abstract>
              <t>This specification defines a new parameter resource to be returned in OAuth 2.0 access token responses. It enables clients to confirm that the issued token is valid for the intended resource. This mitigates ambiguity and certain classes of security vulnerabilities such as resource mix-up attacks, particularly in systems that use the Resource Indicators for OAuth 2.0 specification [RFC8707].</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-mcguinness-oauth-resource-token-resp-01"/>
        </reference>
      </references>
    </references>
    <?line 296?>

<section anchor="appendix-fine-grained">
      <name>Resource Discovery for Fine-Grained APIs</name>
      <t>This non-normative example illustrates a common deployment pattern where the original exact-match validation rule in Section 3.3 of <xref target="RFC9728"/> creates a barrier to adoption, and shows how the updated rule in <xref target="update-section-3-3"/> resolves it.</t>
      <section anchor="exact-match-constraint">
        <name>Exact-Match Constraint</name>
        <t>Consider a resource server that exposes individual user resources at unique URLs of the form <tt>https://example.com/users/{id}</tt>.</t>
        <t>A client that does not yet hold an access token makes a <tt>GET</tt> request to the resource.  The resource server responds with <tt>401 Unauthorized</tt> and a <tt>WWW-Authenticate</tt> challenge identifying the Protected Resource Metadata document:</t>
        <artwork><![CDATA[
GET /users/100 HTTP/1.1
Host: example.com

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer resource_metadata=
  "https://example.com/.well-known/oauth-protected-resource"
]]></artwork>
        <t>Following the discovery procedure in Section 3 of <xref target="RFC9728"/>, the client retrieves the metadata document:</t>
        <artwork><![CDATA[
GET /.well-known/oauth-protected-resource HTTP/1.1
Host: example.com

HTTP/1.1 200 OK
Content-Type: application/json

{
  "resource": "https://example.com/users/",
  "authorization_servers": ["https://as.example.com"],
  ...
}
]]></artwork>
        <t>Under the original Section 3.3 rule of <xref target="RFC9728"/>, the <tt>resource</tt> value <bcp14>MUST</bcp14> be identical to the request URL <tt>https://example.com/users/100</tt>.  Because the metadata instaed contains an invalid value of <tt>https://example.com/users/</tt>, the client <bcp14>MUST NOT</bcp14> use the metadata.</t>
        <t>To satisfy the original exact-match requirement, a resource server has two options.</t>
        <t><strong>Option 1: A distinct metadata document per resource URL.</strong></t>
        <t>Each resource URL requires its own Protected Resource Metadata document, for example:</t>
        <artwork><![CDATA[
https://example.com/users/100/.well-known/...
https://example.com/users/101/.well-known/...
https://example.com/users/102/.well-known/...
...
]]></artwork>
        <t>For APIs where the set of resource URLs is not fixed in advance, this creates an unbounded number of metadata documents to provision, serve, and keep consistent.  In practice this results in increased storage overhead, cache fragmentation, and operational complexity that scales linearly with the number of resources.</t>
        <t><strong>Option 2: Out-of-band knowledge of a representative resource URL.</strong></t>
        <t>To work around the exact-match constraint, a client could first make a <tt>GET</tt> request to a "parent" resource (e.g., <tt>https://example.com/users</tt>) in order to trigger a <tt>401 Unauthorized</tt> response whose associated metadata contains a <tt>resource</tt> value of <tt>https://example.com/users</tt>.  The client would perform discovery against that URL, obtain an access token, and then use the access token to access <tt>https://example.com/users/100</tt>.</t>
        <artwork><![CDATA[
GET /users HTTP/1.1
Host: example.com

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer resource_metadata=
  "https://example.com/.well-known/oauth-protected-resource"
]]></artwork>
        <t>This approach requires out-of-band knowledge of which URL to request first, which is not conveyed by the protocol.  It also introduces an additional round trip before the client can access the originally desired resource, increasing latency and complexity for every new client interaction.</t>
      </section>
      <section anchor="resolution-with-the-updated-rule">
        <name>Resolution with the Updated Rule</name>
        <t>The updated validation rule in <xref target="updated-rule"/> permits the <tt>resource</tt> value to be any URI that shares the same TLS origin as the request URL and whose path is a prefix of the request URL path.  This allows a single metadata document to cover a collection of related resources, enabling straightforward discovery with no additional round trips or out-of-band coordination.</t>
        <t>A client that does not yet hold an access token makes a <tt>GET</tt> request to the resource.  The resource server responds with <tt>401 Unauthorized</tt> and a <tt>WWW-Authenticate</tt> challenge:</t>
        <artwork><![CDATA[
GET /users/100 HTTP/1.1
Host: example.com

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer resource_metadata=
  "https://example.com/.well-known/oauth-protected-resource"
]]></artwork>
        <t>The client retrieves the metadata document:</t>
        <artwork><![CDATA[
GET /.well-known/oauth-protected-resource HTTP/1.1
Host: example.com

HTTP/1.1 200 OK
Content-Type: application/json

{
  "resource": "https://example.com/users/",
  "authorization_servers": ["https://as.example.com"],
  ...
}
]]></artwork>
        <t>The client validates that <tt>https://example.com/users/</tt> shares the same TLS origin as <tt>https://example.com/users/100</tt> and that the path <tt>/users/</tt> is a prefix of <tt>/users/100</tt> on a segment boundary.  Both conditions are satisfied, so the client accepts the metadata.</t>
        <t>The client uses <tt>https://example.com/users/</tt> as the resource indicator (per <xref target="RFC8707"/>) when requesting an access token from the authorization server.  The resulting access token can be reused for subsequent requests to <tt>https://example.com/users/101</tt>, <tt>https://example.com/users/102</tt>, and so on without repeating the discovery or token-request flow.</t>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors would like to thank the members of the OAuth Working Group and MCP Authorization Working Group for their feedback and discussion on the challenges of dynamic resource discovery and cross-resource token reuse.</t>
    </section>
    <section numbered="false" anchor="document-history">
      <name>Document History</name>
      <t>-00</t>
      <ul spacing="normal">
        <li>
          <t>Initial version.</t>
        </li>
      </ul>
    </section>
  </back>
  <!-- ##markdown-source:
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
HuIXA8/xiw6gUZCrSWP8L+VMDc5iWgAA

-->

</rfc>
