<?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-resource-token-resp-04" category="std" consensus="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title abbrev="Resource Token Response Parameter">OAuth 2.0 Resource Parameter in Access Token Response</title>
    <seriesInfo name="Internet-Draft" value="draft-mcguinness-oauth-resource-token-resp-04"/>
    <author fullname="Karl McGuinness">
      <organization>Independent</organization>
      <address>
        <email>public@karlmcguinness.com</email>
      </address>
    </author>
    <author fullname="Jared Hanson">
      <organization>Keycard Labs</organization>
      <address>
        <email>jared@keycard.ai</email>
        <uri>https://keycard.ai</uri>
      </address>
    </author>
    <author fullname="Filip Skokan">
      <organization>Okta</organization>
      <address>
        <email>panva.ip@gmail.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>Resource Indicators</keyword>
    <keyword>Authorization Server</keyword>
    <keyword>Token Response</keyword>
    <keyword>Mix-up Attack</keyword>
    <abstract>
      <?line 53?>

<t>This specification defines a new parameter <tt>resource</tt> 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 <xref target="RFC8707"/>.</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-resource-token-resp/draft-mcguinness-oauth-resource-token-resp.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-mcguinness-oauth-resource-token-resp/"/>.
      </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-resource-token-resp"/>.</t>
    </note>
  </front>
  <middle>
    <?line 57?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>OAuth 2.0 defines a framework in which clients obtain access tokens from authorization servers and present them to protected resources. In deployments involving multiple protected resources or resource servers (APIs), clients often need to determine whether a given access token is valid for a specific resource.</t>
      <t>The Resource Indicators for OAuth 2.0 specification <xref target="RFC8707"/> introduced the <tt>resource</tt> request parameter, which allows a client to indicate the protected resource(s) for which an access token is intended to be used. An authorization server can use this information when issuing an access token, for example by applying resource-specific restrictions based on policy or configuration.</t>
      <t>However, <xref target="RFC8707"/> does not define any mechanism for an authorization server to confirm, in the access token response, which resource(s) were ultimately accepted. As a result, a client has no interoperable way to validate the effective resource scope of an issued access token.</t>
      <t>When an authorization request includes one or more <tt>resource</tt> parameters, authorization servers in deployed systems may exhibit a range of behaviors depending on their capabilities and policy configuration. An authorization server <bcp14>MAY</bcp14>, for example:</t>
      <ul spacing="normal">
        <li>
          <t>Ignore the <tt>resource</tt> parameter and issue an access token that is not restricted to any specific resource.</t>
        </li>
        <li>
          <t>Ignore the <tt>resource</tt> parameter and issue an access token that is valid for a server-assigned resource or set of resources.</t>
        </li>
        <li>
          <t>Accept all requested <tt>resource</tt> values and issue an access token that is valid for the complete requested set.</t>
        </li>
        <li>
          <t>Accept only a subset of requested <tt>resource</tt> values and issue an access token that is valid for that subset, without explicitly indicating that other requested resources were rejected.</t>
        </li>
        <li>
          <t>Override the requested <tt>resource</tt> values and issue an access token that is valid for resources determined by authorization server policy or client configuration.</t>
        </li>
        <li>
          <t>Reject the request by returning an <tt>invalid_target</tt> error response as defined in <xref target="RFC8707"/>.</t>
        </li>
      </ul>
      <t>In the absence of explicit confirmation in the token response, a client cannot determine which of these behaviors occurred and may incorrectly assume that an access token is valid for a particular resource.</t>
      <t>This ambiguity is especially problematic in deployments that rely on dynamic discovery of protected resources and authorization servers. In such environments, a client may learn the protected resource URL at runtime and discover an authorization server using OAuth 2.0 Protected Resource Metadata <xref target="RFC9728"/>, without any pre-established trust relationship between the client and the resource. See <xref target="resource-mix-up-via-dynamic-discovery-example"/> for an example of how this can lead to resource mix-up attacks.</t>
      <t>A key challenge in these deployments is that the client has no reliable way to validate whether a discovered authorization server is actually authoritative for a given protected resource. While <xref target="RFC9728"/> allows protected resource metadata to be cryptographically signed, this would require clients to be pre-configured with trust anchors for signature verification, which defeats the purpose of runtime discovery.</t>
      <t>Similarly, an authorization server could publish a list of protected resources it supports in its metadata <xref target="RFC8414"/>, but this approach does not scale in practice for large APIs or resource domains with many distinct resource identifiers, nor does it address cases where authorization server policy dynamically determines resource validity.</t>
      <t>Some clients attempt to determine the applicability of an access token by examining audience-related information. A client might call the token introspection endpoint <xref target="RFC7662"/> to obtain an audience value, or might locally inspect the aud claim when the access token is self-contained, such as a JWT <xref target="RFC7519"/>. OAuth treats access tokens as opaque to the client (<xref section="1.4" sectionFormat="of" target="RFC6749"/>). As a result, neither token introspection nor local inspection of a self-contained token provides a reliable or interoperable mechanism for determining the protected resource for which an access token is valid.</t>
      <t>Audience values are token-format-specific and policy-defined. They do not have standardized semantics across authorization server implementations. As described in <xref target="resource-vs-audience"/>, audience values commonly identify authorization servers, tenants, resource servers, or other logical entities rather than concrete protected resource identifiers. A protected resource may accept access tokens with broad, narrow, or indirect audience values. There is no predictable or discoverable relationship between such values and the resource’s URL. Clients therefore cannot rely on audience information, whether obtained from a token introspection response or from local inspection of a self-contained access token, to determine whether an access token is applicable to a specific protected resource.</t>
      <t>As a result, learning the audience of an issued access token does not provide a reliable or interoperable way for a client to determine whether the token is valid for the intended resource, particularly when multiple protected resources share an authorization server or when the client interacts with resources discovered dynamically at runtime. This document uses the term <em>resource</em> as defined in <xref target="RFC8707"/>. The relationship between resources and token audience values is discussed further in <xref target="resource-vs-audience"/>.</t>
      <t>Consequently, existing OAuth mechanisms do not provide a practical, interoperable way for a client to confirm that an issued access token is valid for the intended resource.</t>
      <t>This specification defines a new <tt>resource</tt> parameter to be returned in OAuth 2.0 access token responses that is orthogonal to the token format issued by the authorization server. The parameter explicitly identifies the protected resource(s) for which the issued access token is valid, enabling clients to validate token applicability before use and reducing ambiguity across deployments.</t>
      <section anchor="resource-mix-up-via-dynamic-discovery-example">
        <name>Resource Mix-Up via Dynamic Discovery Example</name>
        <t>The following example illustrates how ambiguity about the effective resource scope of an issued access token can lead to a resource mix-up attack in deployments that rely on dynamic discovery.</t>
        <t><strong>Preconditions:</strong></t>
        <ul spacing="normal">
          <li>
            <t>A client wants to access a protected resource at <tt>https://api.example.net/data</tt> and is not statically configured with knowledge of that resource or its authorization server.</t>
          </li>
          <li>
            <t>The client uses OAuth 2.0 Protected Resource Metadata <xref target="RFC9728"/> to dynamically discover an authorization server for the resource.</t>
          </li>
          <li>
            <t>An attacker controls the protected resource at <tt>https://api.example.net/data</tt> and publishes Protected Resource Metadata claiming <tt>https://legit-as.example.com</tt> as the authorization server, advertising legitimate-looking scopes such as <tt>data:read data:write</tt>.</t>
          </li>
          <li>
            <t>The client has an existing client registration with <tt>https://legit-as.example.com</tt>.</t>
          </li>
          <li>
            <t>The authorization server at <tt>https://legit-as.example.com</tt> does not support <xref target="RFC8707"/> and ignores the <tt>resource</tt> parameter, issuing access tokens based solely on requested scopes.</t>
          </li>
          <li>
            <t>The user trusts <tt>https://legit-as.example.com</tt> and would consent to the requested scopes for a legitimate client.</t>
          </li>
        </ul>
        <t><strong>Attack Flow:</strong></t>
        <ol spacing="normal" type="1"><li>
            <t>The client retrieves Protected Resource Metadata from <tt>https://api.example.net/data</tt> and discovers <tt>https://legit-as.example.com</tt> as the authorization server.</t>
          </li>
          <li>
            <t>The client sends an authorization request to <tt>https://legit-as.example.com</tt>, including <tt>resource=https://api.example.net/data</tt> and scopes <tt>data:read data:write</tt>.</t>
          </li>
          <li>
            <t>The authorization server processes the request based on scopes, ignores the <tt>resource</tt> parameter, and—after user consent—issues an access token without confirming the selected resource.</t>
          </li>
          <li>
            <t>The client receives the access token but cannot determine whether it is valid for <tt>https://api.example.net/data</tt> or for some other protected resource.</t>
          </li>
          <li>
            <t>The client presents the access token to <tt>https://api.example.net/data</tt>. The attacker intercepts the token and reuses it to access a legitimate protected resource that trusts the same authorization server and accepts tokens with the same scopes.</t>
          </li>
        </ol>
        <t>Without explicit confirmation of the resource in the token response, the client cannot detect that the authorization server ignored or overrode the requested resource indicator. User consent alone may not prevent this attack, particularly when authorization servers do not prominently display resource information during authorization.</t>
      </section>
    </section>
    <section anchor="conventions-and-terminology">
      <name>Conventions and Terminology</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 anchor="terminology">
        <name>Terminology</name>
        <t>The terms "client", "authorization server", "resource server", "access token", "protected resource", "authorization request", "authorization response", "access token request", "access token response" are defined by the OAuth 2.0 Authorization Framework specification <xref target="RFC6749"/>.</t>
        <t>The term "resource" is defined by the Resource Indicators for OAuth 2.0 specification <xref target="RFC8707"/>.</t>
        <t>The term "server-assigned resource" denotes resource(s) assigned by the authorization server (e.g., defaults or additions based on policy, configuration, or requested scopes).</t>
        <t>The term "StringOrURI" is defined by the JWT specification <xref target="RFC7519"/>.</t>
      </section>
      <section anchor="resource-vs-audience">
        <name>Resource vs Audience</name>
        <t>This specification uses the term <em>resource</em> (as defined in <xref target="RFC8707"/>) rather than <em>audience</em> (as commonly used in access token formats such as JWTs) to describe the protected resource for which an access token is valid. This distinction is intentional and reflects a fundamental separation in OAuth between resource identification and token representation.</t>
        <t>In OAuth, a client interacts with a protected resource by making requests to a specific resource URL. The client may not know how that resource is represented internally by the authorization server, including which audience values a resource server will accept. As a result, a client cannot assume any fixed or discoverable relationship between a protected resource’s URL and the audience values that may appear in an access token.</t>
        <t>While a resource identifier and an access token’s audience value may coincide in some deployments, they are not equivalent. A resource server protecting a given resource may accept access tokens with audience restrictions that are:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Broad</strong>, such as <tt>https://api.example.com</tt>, representing an API-wide identifier.</t>
          </li>
          <li>
            <t><strong>Narrow</strong>, such as <tt>https://api.example.com/some/protected/resource</tt>, representing a specific protected resource.</t>
          </li>
          <li>
            <t><strong>Logical or indirect</strong>, such as <tt>urn:example:api</tt> or <tt>https://example.net</tt>, which have no direct correspondence to the resource’s URL.</t>
          </li>
        </ul>
        <t>Audience assignment is a matter of authorization server policy. A client therefore cannot reliably predict which audience value will be used in an issued access token or which audience values a resource server will accept. This limitation is particularly relevant in dynamic environments, such as those using OAuth 2.0 Protected Resource Metadata <xref target="RFC9728"/>, where a client can discover the protected resource URL but cannot discover the authorization server’s audience assignment policy.</t>
        <t>Some deployments attempt to encode protected resource identifiers into scope values and rely on the <tt>scope</tt> parameter in the access token response <xref target="RFC6749"/> to infer the applicability of an access token. This approach conflates two distinct concepts in OAuth. Scope expresses the permissions or actions that an access token authorizes, while the <tt>resource</tt> parameter <xref target="RFC8707"/> identifies the protected resource at which those permissions may be exercised. Encoding resource identifiers into scope values obscures this distinction, limits the independent evolution of authorization and resource targeting, and does not compose well in deployments where a single resource supports multiple scopes or where the same scope applies across multiple resources.</t>
        <t>Some deployments also rely on protected resource metadata <xref target="RFC9728"/> or authorization server metadata <xref target="RFC8414"/> to discover which authorization server is authoritative for a given protected resource. While these mechanisms support discovery, they do not provide issuance-time confirmation of the resource(s) for which an access token is valid. Metadata describes static relationships and capabilities, not the authorization server’s resource selection decision for a specific token. As a result, metadata alone cannot be relied upon to determine whether an authorization server honored, restricted, or substituted a requested resource when issuing an access token.</t>
        <t>For these reasons, returning audience or scope information in the token response is less useful to a client than returning the resource(s) for which the access token was issued. By returning the <tt>resource</tt> parameter, this specification enables a client to confirm that an access token is valid for the specific resource it requested and to detect resource mix-up conditions in which an authorization server issues a token for a different resource than intended.</t>
        <t>This approach is consistent with Resource Indicators <xref target="RFC8707"/> and Protected Resource Metadata <xref target="RFC9728"/>, which define the <tt>resource</tt> parameter as the client-facing mechanism for identifying the target protected resource, independent of how a resource server enforces audience restrictions internally.</t>
        <t>This specification does not define, constrain, or replace the use of audience values in access tokens, nor does it require any particular token format. How authorization servers encode audience information and how resource servers enforce audience restrictions are explicitly out of scope.</t>
      </section>
    </section>
    <section anchor="resource-parameter-in-token-response">
      <name>Resource Parameter in Token Response</name>
      <t>Authorization servers that support this specification <bcp14>MUST</bcp14> include the <tt>resource</tt> parameter in successful access token responses, as defined in Section 5.1 of <xref target="RFC6749"/>, to identify the protected resource(s) for which the access token is valid, according to the rules in <xref target="authorization-server-processing-rules"/>.</t>
      <t>The value of the <tt>resource</tt> parameter <bcp14>MUST</bcp14> be either:</t>
      <ul spacing="normal">
        <li>
          <t>A single case-sensitive string containing an absolute URI, as defined in <xref section="2" sectionFormat="of" target="RFC8707"/>, when the access token is valid for exactly one resource.</t>
        </li>
        <li>
          <t>An array of case-sensitive strings, each containing an absolute URI as defined in <xref section="2" sectionFormat="of" target="RFC8707"/>, when the access token is valid for more than one resource. The array <bcp14>MUST</bcp14> contain at least one element, and each element <bcp14>MUST</bcp14> be unique when compared using the URI comparison rules in <xref section="6.2.1" sectionFormat="of" target="RFC3986"/> after applying syntax-based normalization as defined in <xref section="6.2.2" sectionFormat="of" target="RFC3986"/>.</t>
        </li>
      </ul>
      <t>When an access token is valid for exactly one resource, the authorization server <bcp14>SHOULD</bcp14> represent the <tt>resource</tt> parameter value as a single string to improve interoperability and ease of processing. When the access token is valid for more than one resource, the authorization server <bcp14>MUST</bcp14> represent the <tt>resource</tt> parameter value as an array.</t>
      <t>This representation is determined solely by the number of resources for which the access token is valid and applies regardless of how many <tt>resource</tt> parameters were included in the request.</t>
      <t>The <tt>resource</tt> parameter uses the same value syntax and requirements as the <tt>resource</tt> request parameter defined in <xref target="RFC8707"/>. Each value <bcp14>MUST</bcp14> be an absolute URI, <bcp14>MUST NOT</bcp14> contain a fragment component, and <bcp14>SHOULD NOT</bcp14> contain a query component.</t>
      <artwork><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache

{
  "access_token": "2YotnFZFEjr1zCsicMWpAA",
  "token_type": "Bearer",
  "expires_in": 3600,
  "resource": "https://api.example.com/"
}
]]></artwork>
      <section anchor="resource-identifier-comparison">
        <name>Resource Identifier Comparison</name>
        <t>This section defines the canonical rules for comparing resource identifiers when determining uniqueness, evaluating requested resources against authorization server policy, or validating that returned resource values correspond to client expectations.</t>
        <t>When comparing resource identifiers, implementations <bcp14>MUST</bcp14> apply the URI comparison rules defined in <xref section="6.2.1" sectionFormat="of" target="RFC3986"/>, after applying syntax-based normalization as defined in <xref section="6.2.2" sectionFormat="of" target="RFC3986"/>. Resource identifiers that are equivalent under these rules <bcp14>MUST</bcp14> be treated as identical.</t>
      </section>
      <section anchor="authorization-server-processing-rules">
        <name>Authorization Server Processing Rules</name>
        <t>Authorization server processing is determined by the number of <tt>resource</tt> parameters included in the authorization request or token request, as defined in <xref target="RFC8707"/>. Server-assigned resources may also affect processing; the effective resource set can be influenced by requested scopes, authorization server policy, client configuration, and other factors.</t>
        <t>The following rules describe how an authorization server evaluates requested resources and determines the effective resource(s) associated with an issued access token. These rules apply equally to access tokens issued using the authorization code grant and the refresh token grant.</t>
        <t>When issuing an access token, any <tt>resource</tt> parameters included in the token request represent an additional restriction on the resources permitted by the underlying authorization grant. The authorization server <bcp14>MUST</bcp14> ensure that each requested resource in the token request is within the set of resources authorized by the grant, or otherwise acceptable under local policy consistent with <xref target="RFC8707"/>. If this condition is not met, the authorization server <bcp14>MUST</bcp14> return an <tt>invalid_target</tt> error and <bcp14>MUST NOT</bcp14> issue an access token.</t>
        <t>If the client includes <tt>resource</tt> parameters in both the authorization request and the token request, the values in the token request <bcp14>MUST</bcp14> be treated as a further restriction and <bcp14>MUST</bcp14> be a subset of the resources permitted by the underlying grant. If no <tt>resource</tt> parameter is included in the token request, the authorization server <bcp14>MAY</bcp14> issue an access token for the resource(s) previously authorized by the grant, subject to local policy.</t>
        <t>When issuing an access token in response to a refresh token request, the authorization server <bcp14>MUST NOT</bcp14> expand the set of authorized resources beyond those previously bound to the underlying grant. If the client supplies one or more <tt>resource</tt> parameters in the refresh token request, each requested resource <bcp14>MUST</bcp14> be within the previously authorized set or otherwise acceptable under local policy consistent with <xref target="RFC8707"/>. If this condition is not met, the authorization server <bcp14>MUST</bcp14> return an <tt>invalid_target</tt> error and <bcp14>MUST NOT</bcp14> issue an access token.</t>
        <t>An authorization server <bcp14>MAY</bcp14> require clients to include a <tt>resource</tt> parameter. If a <tt>resource</tt> parameter is required by local policy and the client does not include one, the authorization server <bcp14>MUST</bcp14> return an <tt>invalid_target</tt> error as defined in <xref target="RFC8707"/> and <bcp14>MUST NOT</bcp14> issue an access token.</t>
        <t>When including a <tt>resource</tt> parameter in the access token response, the authorization server <bcp14>MUST</bcp14> use a string when exactly one resource value is returned and <bcp14>MUST</bcp14> use an array of strings when more than one resource value is returned (whether from requested resources, server-assigned resources, or both).</t>
        <t>When the client included one or more <tt>resource</tt> parameters in the request, the authorization server <bcp14>MUST NOT</bcp14> issue an access token unless at least one requested resource is acceptable. The server <bcp14>MUST</bcp14> return an <tt>invalid_target</tt> error if none of the requested resources are acceptable, even if server-assigned resources could be returned. Server-assigned resources may only be included in addition to at least one accepted requested resource.</t>
        <section anchor="summary-table">
          <name>Summary Table</name>
          <table>
            <thead>
              <tr>
                <th align="left">Client Request Shape</th>
                <th align="left">Authorization Server Outcome</th>
                <th align="left">Authorization Server Processing Rules</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">
                  <strong>One or more <tt>resource</tt> values requested</strong></td>
                <td align="left">No acceptable requested resource</td>
                <td align="left">
                  <bcp14>MUST</bcp14> return <tt>invalid_target</tt> and <bcp14>MUST NOT</bcp14> issue an access token.</td>
              </tr>
              <tr>
                <td align="left"> </td>
                <td align="left">One or more acceptable requested resources</td>
                <td align="left">
                  <bcp14>MUST</bcp14> include <tt>resource</tt> with at least the accepted requested resource(s). <bcp14>MAY</bcp14> include server-assigned resource(s) in addition.</td>
              </tr>
              <tr>
                <td align="left">
                  <strong>No <tt>resource</tt> requested</strong></td>
                <td align="left">server-assigned resource(s)</td>
                <td align="left">
                  <bcp14>SHOULD</bcp14> include the assigned resource(s) in the <tt>resource</tt> parameter.</td>
              </tr>
              <tr>
                <td align="left"> </td>
                <td align="left">No resource-specific restriction</td>
                <td align="left">
                  <bcp14>SHOULD</bcp14> omit the <tt>resource</tt> parameter.</td>
              </tr>
            </tbody>
          </table>
          <t>When comparing resource identifiers, the authorization server <bcp14>MUST</bcp14> apply the rules defined in <xref target="resource-identifier-comparison"/>.</t>
        </section>
        <section anchor="client-requested-one-or-more-resources">
          <name>Client Requested One or More Resources</name>
          <t>If the client included one or more <tt>resource</tt> parameters in the authorization request or token request:</t>
          <ul spacing="normal">
            <li>
              <t>The authorization server <bcp14>MUST</bcp14> evaluate the requested <tt>resource</tt> value(s) according to local policy and determine which requested values are acceptable.</t>
            </li>
            <li>
              <t>If none of the requested <tt>resource</tt> values are acceptable, the authorization server <bcp14>MUST</bcp14> return an <tt>invalid_target</tt> error response as defined in <xref target="RFC8707"/> and <bcp14>MUST NOT</bcp14> issue an access token.</t>
            </li>
            <li>
              <t>If one or more requested <tt>resource</tt> values are acceptable:
              </t>
              <ul spacing="normal">
                <li>
                  <t>The authorization server <bcp14>MUST</bcp14> include the <tt>resource</tt> parameter in the access token response.</t>
                </li>
                <li>
                  <t>The returned value(s) <bcp14>MUST</bcp14> include at least one requested <tt>resource</tt> value according to the rules defined in <xref target="resource-identifier-comparison"/>.</t>
                </li>
                <li>
                  <t>The returned set <bcp14>MAY</bcp14> contain a strict subset of the requested <tt>resource</tt> values (when multiple were requested).</t>
                </li>
                <li>
                  <t>The returned set <bcp14>MAY</bcp14> contain additional server-assigned resources. See <xref target="ex-scope-defined-resource"/> for an example using scope-defined resources.</t>
                </li>
                <li>
                  <t>The returned set <bcp14>MUST NOT</bcp14> contain duplicate <tt>resource</tt> values, including values that differ only by URI normalization using rules defined in <xref target="resource-identifier-comparison"/>.</t>
                </li>
              </ul>
            </li>
          </ul>
        </section>
        <section anchor="client-did-not-request-a-resource">
          <name>Client Did Not Request a Resource</name>
          <t>If the client did not include any <tt>resource</tt> parameters in the authorization request or token request:</t>
          <ul spacing="normal">
            <li>
              <t>If the authorization server assigns one or more server-assigned <tt>resource</tt> value(s) based on policy, client configuration, or requested scopes:
              </t>
              <ul spacing="normal">
                <li>
                  <t>The authorization server <bcp14>SHOULD</bcp14> include the assigned <tt>resource</tt> value(s) in the <tt>resource</tt> parameter of the response.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>If the authorization server does not apply any <tt>resource</tt>-specific restriction to the access token:
              </t>
              <ul spacing="normal">
                <li>
                  <t>The authorization server <bcp14>SHOULD</bcp14> omit the <tt>resource</tt> parameter from the response.</t>
                </li>
              </ul>
            </li>
          </ul>
          <t>If the <tt>resource</tt> parameter is omitted, the access token is not valid for any specific resource as defined by this specification.</t>
        </section>
      </section>
      <section anchor="client-processing-rules">
        <name>Client Processing Rules</name>
        <t>The client processing requirements in this section depend on (a) whether the client requested one or more <tt>resource</tt> values, as defined in <xref target="RFC8707"/>, and (b) whether the client was pre-configured with knowledge of both the authorization server and the protected resource prior to any interaction.</t>
        <t>A client is considered to have <strong>pre-configured knowledge</strong> when it was statically configured, prior to runtime, with both the identity of the authorization server (e.g., the issuer URI or token endpoint) and the identity of the protected resource(s) for which it will use access tokens. Such a client has an established trust relationship with these endpoints and can assume it is not exposed to resource mix-up attacks.</t>
        <t>A client that does not have pre-configured knowledge of both the authorization server and the protected resource (for example, because it discovered either endpoint at runtime using mechanisms such as OAuth 2.0 Protected Resource Metadata <xref target="RFC9728"/>) is exposed to resource mix-up attacks as described in <xref target="resource-mix-up-via-dynamic-discovery-example"/>. Such clients <bcp14>MUST</bcp14> apply all of the validation rules in this section. A client with pre-configured knowledge of both the authorization server and the protected resource <bcp14>SHOULD</bcp14> apply the validation rules, but is not required to reject responses that omit the <tt>resource</tt> parameter.</t>
        <t>When a <tt>resource</tt> parameter is included in an access token response, the client <bcp14>MUST</bcp14> interpret and compare the returned resource identifiers using the rules defined in <xref target="resource-identifier-comparison"/>. If the client cannot determine that an access token is valid for the intended protected resource, the client <bcp14>MUST NOT</bcp14> use the access token.</t>
        <t>If validation succeeds, the client <bcp14>MAY</bcp14> use the access token and <bcp14>MUST</bcp14> use it only with the resource(s) identified in the response. Any returned <tt>scope</tt> value <bcp14>MUST</bcp14> be interpreted in conjunction with the returned <tt>resource</tt> values, and the granted scopes <bcp14>MUST</bcp14> be appropriate for the returned resource(s), consistent with <xref section="3.3" sectionFormat="of" target="RFC6749"/>.</t>
        <t>If validation fails at any point, the client <bcp14>MUST NOT</bcp14> use the access token and <bcp14>SHOULD</bcp14> discard it.</t>
        <t>These client processing rules apply equally to access tokens issued using the authorization code grant and to access tokens issued using the refresh token grant.</t>
        <section anchor="summary-table-1">
          <name>Summary Table</name>
          <table>
            <thead>
              <tr>
                <th align="left">Client Request Shape</th>
                <th align="left">Token Response</th>
                <th align="left">Client Processing Rules</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">
                  <strong>One or more <tt>resource</tt> values requested</strong></td>
                <td align="left">
                  <tt>resource</tt> omitted</td>
                <td align="left">Client without pre-configured knowledge of both the AS and resource: <bcp14>MUST NOT</bcp14> use the access token and <bcp14>SHOULD</bcp14> discard it. Client with pre-configured knowledge of both the AS and resource: <bcp14>MAY</bcp14> use the access token consistent with prior behavior.</td>
              </tr>
              <tr>
                <td align="left"> </td>
                <td align="left">
                  <tt>resource</tt> present</td>
                <td align="left">Valid only if at least one returned identifier matches a requested resource; additional elements <bcp14>MAY</bcp14> be server-assigned resources.</td>
              </tr>
              <tr>
                <td align="left">
                  <strong>No <tt>resource</tt> requested</strong></td>
                <td align="left">
                  <tt>resource</tt> omitted</td>
                <td align="left">Valid. Token is not resource-specific.</td>
              </tr>
              <tr>
                <td align="left"> </td>
                <td align="left">
                  <tt>resource</tt> present</td>
                <td align="left">Valid. Client <bcp14>SHOULD</bcp14> treat the returned value as a server-assigned resource assignment.</td>
              </tr>
              <tr>
                <td align="left">
                  <strong>Any request shape</strong></td>
                <td align="left">
                  <tt>error=invalid_target</tt></td>
                <td align="left">Client <bcp14>MUST</bcp14> treat this as a terminal error and <bcp14>MUST NOT</bcp14> use an access token.</td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="parsing-the-resource-parameter">
          <name>Parsing the <tt>resource</tt> Parameter</name>
          <t>If the access token response includes a <tt>resource</tt> parameter, the client <bcp14>MUST</bcp14> parse it as follows:</t>
          <ul spacing="normal">
            <li>
              <t>A string value represents a single resource identifier.</t>
            </li>
            <li>
              <t>An array value represents multiple resource identifiers; each element <bcp14>MUST</bcp14> be a string.</t>
            </li>
            <li>
              <t>Any other value is invalid; the client <bcp14>MUST NOT</bcp14> use the access token and <bcp14>SHOULD</bcp14> discard it.</t>
            </li>
          </ul>
          <t>The client <bcp14>MUST</bcp14> normalize the parsed value to a set of resource identifiers (treating a string as a single-element set) before applying the validation rules below. When comparing resource identifiers, the client <bcp14>MUST</bcp14> apply the rules defined in <xref target="resource-identifier-comparison"/>.</t>
        </section>
        <section anchor="client-requested-one-or-more-resources-1">
          <name>Client Requested One or More Resources</name>
          <t>If the client included one or more <tt>resource</tt> parameters in the token request:</t>
          <ul spacing="normal">
            <li>
              <t>If a <tt>resource</tt> parameter is present in the response, it <bcp14>MUST</bcp14> contain at least one identifier that matches a requested resource (additional identifiers <bcp14>MAY</bcp14> be server-assigned resources). Validation fails if the returned set contains none of the requested resources, or contains duplicate resource identifiers.</t>
            </li>
            <li>
              <t>A client without pre-configured knowledge of both the authorization server and the protected resource <bcp14>MUST</bcp14> require the <tt>resource</tt> parameter to be present in the response. If it is absent, the client <bcp14>MUST NOT</bcp14> use the access token and <bcp14>SHOULD</bcp14> discard it.</t>
            </li>
            <li>
              <t>A client with pre-configured knowledge of both the authorization server and the protected resource that receives a response without a <tt>resource</tt> parameter <bcp14>SHOULD</bcp14> treat the token as not resource-confirmed. The client <bcp14>MAY</bcp14> use the access token consistent with its prior behavior before adopting this specification.</t>
            </li>
          </ul>
          <section anchor="ex-single-resource-authz">
            <name>Authorization Request Example</name>
            <t>Client obtains an access token for the protected resource at <tt>https://api.example.com/customers</tt> using the authorization code grant.</t>
            <section anchor="authorization-request">
              <name>Authorization Request</name>
              <t>Client makes an authorization request for the protected resource at <tt>https://api.example.com/customers</tt>.</t>
              <artwork><![CDATA[
GET /authorize?response_type=code
  &client_id=client123
  &redirect_uri=https%3A%2F%2Fclient.example.com%2Fcb
  &scope=customers%3Aread
  &state=abc123
  &resource=https%3A%2F%2Fapi.example.com%2Fcustomers
  &code_challenge=E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM
  &code_challenge_method=S256
HTTP/1.1
Host: authorization-server.example.com
]]></artwork>
            </section>
            <section anchor="redirect">
              <name>Redirect</name>
              <t>The authorization server redirects the user-agent back to the client with an authorization code.</t>
              <artwork><![CDATA[
HTTP/1.1 302 Found
Location: https://client.example.com/cb?code=SplxlOBeZQQYbYS6WxSbIA&state=abc123
]]></artwork>
            </section>
            <section anchor="token-request">
              <name>Token Request</name>
              <t>The client exchanges the authorization code for an access token.</t>
              <artwork><![CDATA[
POST /token HTTP/1.1
Host: authorization-server.example.com
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code&
code=SplxlOBeZQQYbYS6WxSbIA&
redirect_uri=https%3A%2F%2Fclient.example.com%2Fcb&
client_id=client123&
code_verifier=dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk
]]></artwork>
            </section>
            <section anchor="token-response">
              <name>Token Response</name>
              <t>The authorization server issues an access token that is valid for the protected resource at <tt>https://api.example.com/customers</tt>.</t>
              <artwork><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache

{
  "access_token": "ACCESS_TOKEN",
  "token_type": "Bearer",
  "expires_in": 3600,
  "scope": "customers:read",
  "resource": "https://api.example.com/customers"
}
]]></artwork>
            </section>
          </section>
          <section anchor="ex-single-resource-refresh">
            <name>Refresh Token Request Example</name>
            <t>Client refreshes an access token for the protected resource at <tt>https://api.example.com/customers</tt>.</t>
            <section anchor="refresh-token-request">
              <name>Refresh Token Request</name>
              <t>The client uses a refresh token to request a new access token that is valid for the protected resource at <tt>https://api.example.com/customers</tt>.</t>
              <artwork><![CDATA[
POST /token HTTP/1.1
Host: authorization-server.example.com
Content-Type: application/x-www-form-urlencoded

grant_type=refresh_token&
refresh_token=REFRESH_TOKEN&
client_id=client123&
scope=customers%3Aread&
resource=https%3A%2F%2Fapi.example.com%2Fcustomers
]]></artwork>
            </section>
            <section anchor="token-response-1">
              <name>Token Response</name>
              <t>The authorization server issues a new access token that is valid for the protected resource at <tt>https://api.example.com/customers</tt>.</t>
              <artwork><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache

{
  "access_token": "ACCESS_TOKEN",
  "token_type": "Bearer",
  "expires_in": 3600,
  "scope": "customers:read",
  "resource": "https://api.example.com/customers"
}
]]></artwork>
            </section>
          </section>
          <section anchor="ex-multi-resource-authz">
            <name>Authorization Request Example</name>
            <t>Client obtains an access token for the protected resources at <tt>https://api.example.com/customers</tt> and <tt>https://api.example.com/orders</tt>.</t>
            <section anchor="authorization-request-1">
              <name>Authorization Request</name>
              <t>Client makes an authorization request for both protected resources.</t>
              <artwork><![CDATA[
GET /authorize?response_type=code
  &client_id=client123
  &redirect_uri=https%3A%2F%2Fclient.example.com%2Fcb
  &scope=customers%3Aread%20orders%3Aread
  &state=abc123
  &resource=https%3A%2F%2Fapi.example.com%2Fcustomers
  &resource=https%3A%2F%2Fapi.example.com%2Forders
  &code_challenge=E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM
  &code_challenge_method=S256
HTTP/1.1
Host: authorization-server.example.com
]]></artwork>
            </section>
            <section anchor="redirect-1">
              <name>Redirect</name>
              <t>The authorization server redirects the user-agent back to the client with an authorization code.</t>
              <artwork><![CDATA[
HTTP/1.1 302 Found
Location: https://client.example.com/cb?code=SplxlOBeZQQYbYS6WxSbIA&state=abc123
]]></artwork>
            </section>
            <section anchor="token-request-1">
              <name>Token Request</name>
              <t>The client exchanges the authorization code for an access token.</t>
              <artwork><![CDATA[
POST /token HTTP/1.1
Host: authorization-server.example.com
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code&
code=SplxlOBeZQQYbYS6WxSbIA&
redirect_uri=https%3A%2F%2Fclient.example.com%2Fcb&
client_id=client123&
code_verifier=dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk
]]></artwork>
            </section>
            <section anchor="token-response-2">
              <name>Token Response</name>
              <t>The authorization server issues an access token that is valid for both protected resources.</t>
              <artwork><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache

{
  "access_token": "ACCESS_TOKEN",
  "token_type": "Bearer",
  "expires_in": 3600,
  "scope": "customers:read orders:read",
  "resource": [
    "https://api.example.com/customers",
    "https://api.example.com/orders"
  ]
}
]]></artwork>
            </section>
          </section>
          <section anchor="ex-multi-resource-refresh">
            <name>Refresh Token Request Example</name>
            <t>Client refreshes an access token for the protected resources at <tt>https://api.example.com/customers</tt> and <tt>https://api.example.com/orders</tt>.</t>
            <section anchor="refresh-token-request-1">
              <name>Refresh Token Request</name>
              <t>The client uses a refresh token to request a new access token that is valid for both protected resources.</t>
              <artwork><![CDATA[
POST /token HTTP/1.1
Host: authorization-server.example.com
Content-Type: application/x-www-form-urlencoded

grant_type=refresh_token&
refresh_token=REFRESH_TOKEN&
client_id=client123&
scope=customers%3Aread%20orders%3Aread&
resource=https%3A%2F%2Fapi.example.com%2Fcustomers&
resource=https%3A%2F%2Fapi.example.com%2Forders
]]></artwork>
            </section>
            <section anchor="token-response-3">
              <name>Token Response</name>
              <t>The authorization server issues a new access token that is valid for both protected resources.</t>
              <artwork><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache

{
  "access_token": "ACCESS_TOKEN",
  "token_type": "Bearer",
  "expires_in": 3600,
  "scope": "customers:read orders:read",
  "resource": [
    "https://api.example.com/customers",
    "https://api.example.com/orders"
  ]
}
]]></artwork>
            </section>
          </section>
        </section>
        <section anchor="client-did-not-request-a-resource-1">
          <name>Client Did Not Request a Resource</name>
          <t>If the client did not include any <tt>resource</tt> parameters in the token request:</t>
          <ul spacing="normal">
            <li>
              <t>If the response includes a <tt>resource</tt> parameter, the client <bcp14>MAY</bcp14> treat it as a server-assigned resource assignment.</t>
            </li>
            <li>
              <t>If the response omits the <tt>resource</tt> parameter, the token <bcp14>SHOULD</bcp14> be treated as unbounded.</t>
            </li>
          </ul>
          <section anchor="ex-default-resource-authz">
            <name>Authorization Request Example</name>
            <t>Client obtains an access token without requesting a specific resource.</t>
            <section anchor="authorization-request-2">
              <name>Authorization Request</name>
              <t>Client makes an authorization request without including a resource indicator.</t>
              <artwork><![CDATA[
GET /authorize?response_type=code
  &client_id=client123
  &redirect_uri=https%3A%2F%2Fclient.example.com%2Fcb
  &scope=orders%3Aread
  &state=abc123
  &code_challenge=E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM
  &code_challenge_method=S256
HTTP/1.1
Host: authorization-server.example.com
]]></artwork>
            </section>
            <section anchor="redirect-2">
              <name>Redirect</name>
              <t>The authorization server redirects the user-agent back to the client with an authorization code.</t>
              <artwork><![CDATA[
HTTP/1.1 302 Found
Location: https://client.example.com/cb?code=SplxlOBeZQQYbYS6WxSbIA&state=abc123
]]></artwork>
            </section>
            <section anchor="token-request-2">
              <name>Token Request</name>
              <t>The client exchanges the authorization code for an access token.</t>
              <artwork><![CDATA[
POST /token HTTP/1.1
Host: authorization-server.example.com
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code&
code=SplxlOBeZQQYbYS6WxSbIA&
redirect_uri=https%3A%2F%2Fclient.example.com%2Fcb&
client_id=client123&
code_verifier=dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk
]]></artwork>
            </section>
            <section anchor="token-response-4">
              <name>Token Response</name>
              <t>The authorization server issues an access token that is valid for the server-assigned protected resource (<tt>https://api.example.com/orders</tt>).</t>
              <artwork><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache

{
  "access_token": "ACCESS_TOKEN",
  "token_type": "Bearer",
  "expires_in": 3600,
  "scope": "orders:read",
  "resource": "https://api.example.com/orders"
}
]]></artwork>
            </section>
          </section>
          <section anchor="ex-default-resource-refresh">
            <name>Refresh Token Request Example</name>
            <t>Client refreshes an access token without explicitly requesting a resource.</t>
            <section anchor="refresh-token-request-2">
              <name>Refresh Token Request</name>
              <t>The client uses a refresh token to request a new access token without explicitly requesting a resource.</t>
              <artwork><![CDATA[
POST /token HTTP/1.1
Host: authorization-server.example.com
Content-Type: application/x-www-form-urlencoded

grant_type=refresh_token&
refresh_token=REFRESH_TOKEN&
client_id=client123&
scope=orders%3Aread
]]></artwork>
            </section>
            <section anchor="token-response-5">
              <name>Token Response</name>
              <t>The authorization server issues a new access token that is valid for the server-assigned protected resource (<tt>https://api.example.com/orders</tt>).</t>
              <artwork><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache

{
  "access_token": "ACCESS_TOKEN",
  "token_type": "Bearer",
  "expires_in": 3600,
  "scope": "orders:read",
  "resource": "https://api.example.com/orders"
}
]]></artwork>
            </section>
          </section>
        </section>
        <section anchor="invalid-resource">
          <name>Invalid Resource</name>
          <t>An <tt>invalid_target</tt> error indicates that none of the requested resource values were acceptable to the authorization server. This outcome may result from authorization server policy or client configuration.</t>
          <t>Upon receiving an <tt>invalid_target</tt> error, the client <bcp14>MAY</bcp14> retry the authorization request with a different <tt>resource</tt> value.</t>
          <section anchor="ex-invalid-resource-authz">
            <name>Authorization Request Example</name>
            <t>Client attempts to obtain an access token for a protected resource (<tt>https://unknown.example.com</tt>) that is not permitted.</t>
            <section anchor="authorization-request-3">
              <name>Authorization Request</name>
              <t>Client makes an authorization request for a protected resource that is not permitted.</t>
              <artwork><![CDATA[
GET /authorize?response_type=code
  &client_id=client123
  &redirect_uri=https%3A%2F%2Fclient.example.com%2Fcb
  &scope=customers%3Aread
  &state=invalid123
  &resource=https%3A%2F%2Funknown.example.com%2F
  &code_challenge=E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM
  &code_challenge_method=S256
HTTP/1.1
Host: authorization-server.example.com
]]></artwork>
            </section>
            <section anchor="error-redirect">
              <name>Error Redirect</name>
              <t>The authorization server rejects the requested resource and does not issue an authorization code.</t>
              <artwork><![CDATA[
HTTP/1.1 302 Found
Location: https://client.example.com/cb?error=invalid_target&error_description=Resource%20not%20allowed&state=invalid123
]]></artwork>
            </section>
          </section>
          <section anchor="ex-invalid-resource-refresh">
            <name>Refresh Token Request Example</name>
            <t>Client attempts to refresh an access token for a protected resource (<tt>https://unknown.example.com</tt>) that is not permitted.</t>
            <section anchor="refresh-token-request-3">
              <name>Refresh Token Request</name>
              <t>The client uses a refresh token to request a new access token for a protected resource that is not permitted.</t>
              <artwork><![CDATA[
POST /token HTTP/1.1
Host: authorization-server.example.com
Content-Type: application/x-www-form-urlencoded

grant_type=refresh_token&
refresh_token=REFRESH_TOKEN&
client_id=client123&
scope=customers%3Aread&
resource=https%3A%2F%2Funknown.example.com%2F
]]></artwork>
            </section>
            <section anchor="error-response">
              <name>Error Response</name>
              <t>The authorization server rejects the requested resource.</t>
              <artwork><![CDATA[
HTTP/1.1 400 Bad Request
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache

{
  "error": "invalid_target",
  "error_description": "Resource not allowed"
}
]]></artwork>
            </section>
          </section>
        </section>
      </section>
      <section anchor="security-considerations">
        <name>Security Considerations</name>
        <t>This section describes security threats related to ambiguous resource selection and access token reuse, and explains how this specification mitigates those threats, either directly or in combination with other OAuth security mechanisms.</t>
        <section anchor="resource-selection-ambiguity-and-mix-up-attacks">
          <name>Resource Selection Ambiguity and Mix-Up Attacks</name>
          <t><strong>Threat:</strong>
An authorization server issues a successful access token response without clearly indicating the protected resource(s) for which the token is valid. This can occur when the server applies server-assigned resource selection, narrows a requested resource set, or substitutes a different resource according to local policy without communicating that decision to the client. Such conditions are more likely in deployments where a client interacts with multiple authorization servers and protected resources, or dynamically discovers authorization servers at runtime, including via HTTP authorization challenges using OAuth 2.0 Protected Resource Metadata <xref target="RFC9728"/>.</t>
          <t><strong>Impact:</strong>
A client may incorrectly assume that an access token is valid for a different protected resource than the one actually authorized. This can result in access token misuse, unintended token disclosure to an incorrect protected resource, or resource mix-up attacks in which a token intended for one resource is presented to another. These risks are amplified in dynamic environments where the client cannot fully validate the trust relationship between a protected resource and the authorization server.</t>
          <t><strong>Mitigation:</strong>
This specification mitigates resource selection ambiguity and OAuth mix-up attacks by requiring authorization servers to explicitly return the resource(s) for which an access token is valid in the access token response. By providing issuance-time confirmation of the effective resource selection, clients can detect cases where a requested resource was narrowed, substituted, or overridden, and can avoid using access tokens with unintended protected resources.</t>
        </section>
        <section anchor="limitations-of-discovery-time-mechanisms">
          <name>Limitations of Discovery-Time Mechanisms</name>
          <t><strong>Threat:</strong>
Clients rely on protected resource metadata <xref target="RFC9728"/> or authorization server metadata <xref target="RFC8414"/> to determine which authorization server is authoritative for a protected resource and assume that successful token issuance implies correct resource binding.</t>
          <t><strong>Impact:</strong>
Metadata describes static relationships and supported capabilities, but does not reflect issuance-time authorization decisions. As a result, clients may be unable to detect cases where an authorization server issues an access token valid for a different resource than the one requested, particularly in dynamic or multi-resource environments.</t>
          <t><strong>Mitigation:</strong>
By returning the effective resource selection in the token response, this specification complements discovery-time mechanisms with issuance-time confirmation. This enables clients to verify that an access token is valid for the intended protected resource regardless of how authorization server relationships were discovered.</t>
        </section>
        <section anchor="token-reuse-by-malicious-protected-resources">
          <name>Token Reuse by Malicious Protected Resources</name>
          <t><strong>Threat:</strong>
A malicious protected resource intercepts an access token during a client's legitimate request and reuses that token to access other protected resources that trust the same authorization server and accept tokens with the same audience and scopes.</t>
          <t><strong>Impact:</strong>
Token reuse can lead to unauthorized access to protected resources beyond those intended by the client, particularly in environments where multiple resources trust a common authorization server and audience values are broad or indirect.</t>
          <t><strong>Mitigation:</strong>
To prevent token reuse attacks, access tokens <bcp14>SHOULD</bcp14> require proof-of-possession, such as Demonstrating Proof-of-Possession (DPoP) as defined in <xref target="RFC9449"/>. Other proof-of-possession mechanisms may also be applicable. Proof-of-possession mechanisms bind the access token to a cryptographic key held by the client and require demonstration of key possession when the token is used. This prevents a malicious protected resource that intercepts an access token from reusing it at other resources, as it does not possess the client's private key. Both the client and authorization server must support proof-of-possession mechanisms for this protection to be effective. See <xref section="9" sectionFormat="of" target="RFC9449"/> for additional details.</t>
        </section>
        <section anchor="client-validation-and-defense-in-depth">
          <name>Client Validation and Defense in Depth</name>
          <t><strong>Threat:</strong>
A client fails to validate the resource(s) returned in the access token response and proceeds to use an access token for a protected resource other than the one for which it was issued.</t>
          <t><strong>Impact:</strong>
Failure to validate the returned <tt>resource</tt> parameter can result in token misuse or unintended interactions with protected resources, even when the authorization server correctly indicates the effective resource selection.</t>
          <t><strong>Mitigation:</strong>
Clients are advised to validate the <tt>resource</tt> parameter in the token response as specified in <xref target="client-processing-rules"/> and to treat mismatches as errors unless explicitly designed to support resource negotiation. While validating the <tt>resource</tt> parameter provides defense in depth by allowing the client to detect resource substitution, it does not prevent token reuse by malicious protected resources. Clients that require strict resource binding <bcp14>SHOULD</bcp14> treat the absence of the <tt>resource</tt> parameter as a potential ambiguity.</t>
        </section>
      </section>
    </section>
    <section anchor="privacy-considerations">
      <name>Privacy Considerations</name>
      <t>Returning the <tt>resource</tt> value may reveal some information about the protected resource. If the value is sensitive, the authorization server <bcp14>SHOULD</bcp14> assess whether the resource name can be safely disclosed to the client.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document updates the "resource" parameter in the OAuth Parameters registry established by <xref target="RFC6749"/>. The "resource" parameter is defined by <xref target="RFC8707"/> for use in authorization requests and token requests. This specification adds the following usage location:</t>
      <section anchor="oauth-parameters-registry">
        <name>OAuth Parameters Registry</name>
        <table>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">Parameter Usage Location</th>
              <th align="left">Description</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">resource</td>
              <td align="left">token response</td>
              <td align="left">Resource to which the access token applies</td>
              <td align="left">This document</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative 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="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="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="RFC8414" target="https://www.rfc-editor.org/info/rfc8414" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8414.xml">
        <front>
          <title>OAuth 2.0 Authorization Server Metadata</title>
          <author fullname="M. Jones" initials="M." surname="Jones"/>
          <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
          <author fullname="J. Bradley" initials="J." surname="Bradley"/>
          <date month="June" year="2018"/>
          <abstract>
            <t>This specification defines a metadata format that an OAuth 2.0 client can use to obtain the information needed to interact with an OAuth 2.0 authorization server, including its endpoint locations and authorization server capabilities.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8414"/>
        <seriesInfo name="DOI" value="10.17487/RFC8414"/>
      </reference>
      <reference anchor="RFC9207" target="https://www.rfc-editor.org/info/rfc9207" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9207.xml">
        <front>
          <title>OAuth 2.0 Authorization Server Issuer Identification</title>
          <author fullname="K. Meyer zu Selhausen" initials="K." surname="Meyer zu Selhausen"/>
          <author fullname="D. Fett" initials="D." surname="Fett"/>
          <date month="March" year="2022"/>
          <abstract>
            <t>This document specifies a new parameter called iss. This parameter is used to explicitly include the issuer identifier of the authorization server in the authorization response of an OAuth authorization flow. The iss parameter serves as an effective countermeasure to "mix-up attacks".</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9207"/>
        <seriesInfo name="DOI" value="10.17487/RFC9207"/>
      </reference>
      <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="RFC7519" target="https://www.rfc-editor.org/info/rfc7519" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7519.xml">
        <front>
          <title>JSON Web Token (JWT)</title>
          <author fullname="M. Jones" initials="M." surname="Jones"/>
          <author fullname="J. Bradley" initials="J." surname="Bradley"/>
          <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
          <date month="May" year="2015"/>
          <abstract>
            <t>JSON Web Token (JWT) is a compact, URL-safe means of representing claims to be transferred between two parties. The claims in a JWT are encoded as a JSON object that is used as the payload of a JSON Web Signature (JWS) structure or as the plaintext of a JSON Web Encryption (JWE) structure, enabling the claims to be digitally signed or integrity protected with a Message Authentication Code (MAC) and/or encrypted.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7519"/>
        <seriesInfo name="DOI" value="10.17487/RFC7519"/>
      </reference>
      <reference anchor="RFC7662" target="https://www.rfc-editor.org/info/rfc7662" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7662.xml">
        <front>
          <title>OAuth 2.0 Token Introspection</title>
          <author fullname="J. Richer" initials="J." role="editor" surname="Richer"/>
          <date month="October" year="2015"/>
          <abstract>
            <t>This specification defines a method for a protected resource to query an OAuth 2.0 authorization server to determine the active state of an OAuth 2.0 token and to determine meta-information about this token. OAuth 2.0 deployments can use this method to convey information about the authorization context of the token from the authorization server to the protected resource.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7662"/>
        <seriesInfo name="DOI" value="10.17487/RFC7662"/>
      </reference>
      <reference anchor="RFC9700" target="https://www.rfc-editor.org/info/rfc9700" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9700.xml">
        <front>
          <title>Best Current Practice for OAuth 2.0 Security</title>
          <author fullname="T. Lodderstedt" initials="T." surname="Lodderstedt"/>
          <author fullname="J. Bradley" initials="J." surname="Bradley"/>
          <author fullname="A. Labunets" initials="A." surname="Labunets"/>
          <author fullname="D. Fett" initials="D." surname="Fett"/>
          <date month="January" year="2025"/>
          <abstract>
            <t>This document describes best current security practice for OAuth 2.0. It updates and extends the threat model and security advice given in RFCs 6749, 6750, and 6819 to incorporate practical experiences gathered since OAuth 2.0 was published and covers new threats relevant due to the broader application of OAuth 2.0. Further, it deprecates some modes of operation that are deemed less secure or even insecure.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="240"/>
        <seriesInfo name="RFC" value="9700"/>
        <seriesInfo name="DOI" value="10.17487/RFC9700"/>
      </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="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>
    <?line 719?>

<section anchor="additional-examples">
      <name>Additional Examples</name>
      <section anchor="requesting-a-token-for-a-dynamically-discovered-protected-resource">
        <name>Requesting a token for a dynamically discovered protected resource</name>
        <t>The following example details the need for the <tt>resource</tt> parameter when a client dynamically discovers an authorization server and obtains an access token using <xref target="RFC9728"/> and <xref target="RFC8414"/></t>
        <t>Client attempts to access a protected resource without a valid access token</t>
        <artwork><![CDATA[
GET /resource
Host: api.example.com
Accept: application/json
]]></artwork>
        <t>Client is challenged for authentication</t>
        <artwork><![CDATA[
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer resource_metadata=
  "https://api.example.com/.well-known/oauth-protected-resource"
]]></artwork>
        <t>Client fetches the resource's OAuth 2.0 Protected Resource Metadata per <xref target="RFC9728"/> to dynamically discover an authorization server that can issue an access token for the resource.</t>
        <artwork><![CDATA[
GET /.well-known/oauth-protected-resource
Host: api.example.com
Accept: application/json

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

{
   "resource":
     "https://api.example.com/resource",
   "authorization_servers":
     [ "https://authorization-server.example.com/" ],
   "bearer_methods_supported":
     ["header", "body"],
   "scopes_supported":
     ["resource.read", "resource.write"],
   "resource_documentation":
     "https://api.example.com/resource_documentation.html"
 }
]]></artwork>
        <t>Client discovers the Authorization Server configuration per <xref target="RFC8414"/></t>
        <artwork><![CDATA[
GET /.well-known/oauth-authorization-server
Host: authorization-server.example.com
Accept: application/json

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

{
  "issuer": "https://authorization-server.example.com/",
  "authorization_endpoint": "https://authorization-server.example.com/oauth2/authorize",
  "token_endpoint": "https://authorization-server.example.com/oauth2/token",
  "jwks_uri": "https://authorization-server.example.com/oauth2/keys",
  "scopes_supported": [
    "resource.read", "resource.write"
  ],
  "response_types_supported": [
    "code"
  ],
  "grant_types_supported": [
    "authorization_code", "refresh_token"
  ],
  ...
}
]]></artwork>
        <t>Client makes an authorization request for the resource</t>
        <artwork><![CDATA[
GET /oauth2/authorize?response_type=code
  &client_id=client123
  &redirect_uri=https%3A%2F%2Fclient.example%2Fcallback
  &scope=resource.read
  &state=abc123
  &resource=https%3A%2F%2Fapi.example.com%2Fresource
  &code_challenge=E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM
  &code_challenge_method=S256
HTTP/1.1
Host: authorization-server.example.com
]]></artwork>
        <t>User successfully authenticates and delegates access to the client for the requested resource and scopes</t>
        <artwork><![CDATA[
HTTP/1.1 302 Found
Location: https://client.example/callback?code=SplxlOBeZQQYbYS6WxSbIA&state=abc123
]]></artwork>
        <t>Client exchanges the authorization code for an access token</t>
        <artwork><![CDATA[
POST /oauth2/token HTTP/1.1
Host: authorization-server.example.com
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code&
code=SplxlOBeZQQYbYS6WxSbIA&
redirect_uri=https%3A%2F%2Fclient.example%2Fcallback&
client_id=client123&
code_verifier=dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk
]]></artwork>
        <t>Client obtains an access token for the resource.</t>
        <artwork><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache

{
  "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
  "token_type": "Bearer",
  "expires_in": 3600,
  "scope": "resource.read",
  "resource": "https://api.example.com/resource"
}
]]></artwork>
        <t>Client verifies that it obtained an access token that is valid for the discovered resource.</t>
      </section>
      <section anchor="ex-scope-defined-resource">
        <name>Scope-defined resource with a resource request</name>
        <t>An authorization server may determine resources from requested scopes in addition to explicit <tt>resource</tt> parameters. For example, a scope might imply a protected resource URL that the authorization server returns as a server-assigned resource alongside any client-requested resources.</t>
        <t>The following example uses OpenID Connect: the <tt>openid</tt> scope implies access to the UserInfo endpoint. When a client requests both a protected resource and the <tt>openid</tt> scope, the authorization server may determine the UserInfo endpoint URL from its configuration (e.g., <tt>{issuer}/userinfo</tt>) and return it as a server-assigned resource alongside the client-requested resource.</t>
        <section anchor="authorization-request-example">
          <name>Authorization request example</name>
          <section anchor="authorization-request-4">
            <name>Authorization Request</name>
            <artwork><![CDATA[
GET /authorize?response_type=code
  &client_id=client123
  &redirect_uri=https%3A%2F%2Fclient.example.com%2Fcb
  &scope=openid%20profile%20data%3Aread
  &state=oidc123
  &resource=https%3A%2F%2Fapi.example.com%2Fdata
  &code_challenge=E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM
  &code_challenge_method=S256
HTTP/1.1
Host: idp.example.com
]]></artwork>
          </section>
          <section anchor="redirect-3">
            <name>Redirect</name>
            <artwork><![CDATA[
HTTP/1.1 302 Found
Location: https://client.example.com/cb?code=SplxlOBeZQQYbYS6WxSbIA&state=oidc123
]]></artwork>
          </section>
          <section anchor="token-request-3">
            <name>Token Request</name>
            <artwork><![CDATA[
POST /token HTTP/1.1
Host: idp.example.com
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code&
code=SplxlOBeZQQYbYS6WxSbIA&
redirect_uri=https%3A%2F%2Fclient.example.com%2Fcb&
client_id=client123&
code_verifier=dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk
]]></artwork>
          </section>
          <section anchor="token-response-6">
            <name>Token Response</name>
            <t>The authorization server issues an access token valid for both the requested resource (<tt>https://api.example.com/data</tt>) and the UserInfo endpoint (<tt>https://idp.example.com/userinfo</tt>), which it determined from the <tt>openid</tt> scope.</t>
            <artwork><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache

{
  "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
  "token_type": "Bearer",
  "expires_in": 3600,
  "scope": "openid profile data:read",
  "resource": [
    "https://api.example.com/data",
    "https://idp.example.com/userinfo"
  ]
}
]]></artwork>
            <t>The client validates that the requested resource (<tt>https://api.example.com/data</tt>) is present in the response. The additional resource (<tt>https://idp.example.com/userinfo</tt>) is a server-assigned resource determined by the authorization server based on the <tt>openid</tt> scope, enabling the client to use the same access token for both the API and the UserInfo endpoint.</t>
          </section>
        </section>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>This proposal builds on prior work in OAuth 2.0 extensibility and security analysis, particularly <xref target="RFC8707"/>, <xref target="RFC9700"/>, and <xref target="RFC9207"/>.</t>
      <t>The authors would like to thank the following individuals who contributed ideas, feedback, and wording that helped shape this specification: Filip Skokan</t>
    </section>
    <section numbered="false" anchor="document-history">
      <name>Document History</name>
      <t>-04</t>
      <ul spacing="normal">
        <li>
          <t>No changes; refreshed to keep the draft active</t>
        </li>
      </ul>
      <t>-03</t>
      <ul spacing="normal">
        <li>
          <t>Existing clients that are deployed in environments that trust AS and RS don't need to process response parameter (draft-skokan-oauth-resource-response gap behavior)</t>
        </li>
        <li>
          <t>Made Filip co-author</t>
        </li>
      </ul>
      <t>-02</t>
      <ul spacing="normal">
        <li>
          <t>Modified processing rules to allow server-assigned resources to be combined with requested resources</t>
        </li>
        <li>
          <t>Added OIDC example</t>
        </li>
        <li>
          <t>Collapsed one and many processing rules to single "one or more"</t>
        </li>
        <li>
          <t>Changed OAuth Registry to update existing resource parameter</t>
        </li>
        <li>
          <t>Editorial cleanup and consistency updates</t>
        </li>
        <li>
          <t>Updated Acknowledgements</t>
        </li>
      </ul>
      <t>-01</t>
      <ul spacing="normal">
        <li>
          <t>Revised Introduction and included attack example</t>
        </li>
        <li>
          <t>Added Resource vs Audience to Terminology</t>
        </li>
        <li>
          <t>Revised Response to provide detailed Authorization Server and Client Processing Rules</t>
        </li>
        <li>
          <t>Updated Security Considerations</t>
        </li>
        <li>
          <t>Editorial cleanup and consistency</t>
        </li>
      </ul>
      <t>-00</t>
      <ul spacing="normal">
        <li>
          <t>Initial revision</t>
        </li>
      </ul>
    </section>
  </back>
  <!-- ##markdown-source:
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
0TZHeGNe5GetdUauBsc35lMASusQs0axFW0lKDGy2Egbj5ZY2IwCjUGkp0k3
KKVng1USuE4Bp8y8kesxUVoXcXobCqp1lmexZOR8FlzU83lYLIMnuOBe742U
I4NpxYL5YhYu4uCN3xo6q6sxhpM7fm4ZS296bwbefzq+3vBn8xysf3f3zE94
on5oSOzuwrof5TZj9xDNG4c4WpSxAVfBXQfef94E9lJXrqNUC1HM0toYmxkK
7YozdaAd1I4haykyUBdpon5ikRZvY3f3Ue7xogkwVw31Rjm+7MBK16RdDs6V
sHxk2tt42+CZJeTzpNuJinNs5jBZza6M58TjKlnjrnorh9M9i/Cy0Msp0oty
fpQdOvwWHHgzrwEFd9bYYWJDNxhk8xSSnWwHqVp6QrMhlhnL6qNhcXPsH9fF
nts8oMmm31PpKNZ2DNtI+6At2DjbfAvcxXk1bjaJaHaqNUM9gdYgNCad0TuE
cHMDXTHKLU9Ja1GotiN3M651Pv8tS7EbsjfcRg7S/U6ev7nJnMYH0in3VZ+v
+NWA/F+q5Yvu8Nzu6cXuH+dpa7yOZTXjElHNAQOPZLSTxe20a87yEL1jSX5g
12PLC3tvLncviYCHG80j1ByuyeCiJHIMh1Weq235m8zkr/gjNLrGaRPDPlbX
LjLxejM9tSZrzvUqkepbyArRavlQ5MCvhoW23ljOuSjwy1856DZ/2Wx/K+U1
GzDu0hW9dJmoOTuH+t5wJm7Kapjoa1dqM3ry1jRzSDiCIITtiRlI7pEnSvBk
ZlXI6vecYKYqJTTRLMw/Qvq6Ed50OtnoImBFVR0agWIAnfKLXe03Rt7hMRnO
1wzP6fTQ4Ta0amn9SS/wVUIHlTChSnAYxDrdXuWVRdQRB56lAoDd3caq9IJA
W+U0RF68t1tF38wsPXX60j5K7YS5Gudjd+5Mqs/oeRT7BTFQzXpUf7ebGgTN
UdflAeEeMMm/Ll1SRhFD2frNRg2re1SqEmYYTa1NJaxmquIn0a1941eY1Ly2
taTJt7TcPoSjLgy9F8ncsPoY98FWHocInKSy2yZJczndX8/qGcryzEko5qqH
rSsdblIj1bUw4nPn78i2Wf9PwbVy4VkGCJb+CiWpkLKd6WMzEqt+hajgo+BG
WLqxjpqr4o6TunW0+BIJeC8li9Xui7TallNpRRv5+ZtupcJXey/KrlRs88ng
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

-->

</rfc>
