<?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.43 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-mcguinness-oauth-rfc9728bis-02" category="std" consensus="true" updates="9728" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <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-02"/>
    <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="October" day="25"/>
    <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" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
          <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" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
          <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-03" 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>
            <author fullname="Filip Skokan" initials="F." surname="Skokan">
              <organization>Okta</organization>
            </author>
            <date day="23" month="March" year="2026"/>
            <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-03"/>
        </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>-02</t>
      <ul spacing="normal">
        <li>
          <t>No changes.</t>
        </li>
      </ul>
      <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:
H4sIAAAAAAAAA+08a3PbRpLf8Svm6A8ruUjqYW0c63aTyI8kqrUtnWyfK7WV
CofAkJwViOFiAMlcx/kt91vul10/ZoDBgxTluK4uVefarYjAPHr63T3dGI1G
UaGLVJ2KwbtVIgslCiMuzspiIY7Hh+IyN4WKC5WIK2VNmcdKvFKFhIGyfnKe
qKzQM61y8Z8y1fBSm2wQyek0VzfVwom4vHpVTwpHxvB6bvL1qbBFEpU03J6K
J4+Pv46ixMSv5RIBTHI5K0bLeF7qLFPWjowEOEf5LMaRU21Hh8eD6Nbk1/Pc
lCuY8V5NBZ7F5PpftBcdyMQmBfByJWHIGxWXuS7Wg0ivcvhd5KUtjg8Pn+Ba
12oNyyWnkRAjMajQMuDfW5DjRtQoyhINpzT5ILpRWalwxV2AFKJYr/Ds7+FU
OpuLH3ASPl9KncJzQsF3WhWzscnn+ELm8QJeLIpiZU8PDnAcPtI3auyHHeCD
g2lubq06oBUOcOZcF4tyCnNrFB/ciXOcmCK9inDTavyYFx1rc/dSd48YL4ol
YCWShC5A4gh2F2JWpmlGPPI3mafiVfyDW4DewoFl5lB7ipRQK5Uhy9JbxYhc
ldNUx99dw/wA+Ngsu3ucyRxpBPwTX+ueHS6uCxkuLXH8eMXjvzPwltaNMpMv
YcoNMcPV988ePfn6K/fnV4//fOj+/Prx4WP355OjI//0ycnJE/8noOY0inQ2
a6331WMecz56Pu7i1HHmqDDXKsOfK1hkPB5H0Wg0EnJqi1zGRRTBQiSIIlEz
DQvsphyGQmUSMAocG6cacG1RryRrwCDIQZquRaJtbG5AZRQLJWSD/XP1z1Ln
aknTzEysqn081HYsBAgujX40foSDKjjdbNhwIQtxu1BZzwJi6bWYhi2mhYSj
JeJGSyHF5P379yM8JGo1VE0TES8AZpXN1ZDAnfhlJuJGpqUSOqPn1aKv3r15
K9QHQCCcFIgSL+j9u6uX9F9GiSgt7AlokTGcyNKbLqRDkeqlLhCThKnVCvhU
TnUKOgvPjQ/tSsWgf2NCH1Dw7QJOBXqzXNI2rE9pZHX+m0r9irxM6QSbEAoQ
rlQOMPSfHV5PAa5sDcc7Z6TbhczdhhZERrx9+QZkRM9hkz0bL4CyQ7EwthjC
tESsTF7sC+kB/GcJugQQgMjC17cwEhAjgengVBJQBIz4wR/djafROGYs6PDE
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
BTI5/wOHhDSodlkAAA==

-->

</rfc>
