<?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-01" 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-01"/>
    <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>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.  <xref target="appendix-fine-grained"/> provides a non-normative example illustrating how the updated rule applies to APIs with fine-grained resource URLs.</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 292?>

<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>-01</t>
      <ul spacing="normal">
        <li>
          <t>Resolved merge error for publication</t>
        </li>
      </ul>
      <t>-00</t>
      <ul spacing="normal">
        <li>
          <t>Initial version.</t>
        </li>
      </ul>
    </section>
  </back>
  <!-- ##markdown-source:
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
WQAA

-->

</rfc>
