<?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.38 (Ruby 2.6.10) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ambekar-oauth-epop-03" category="std" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.33.0 -->
  <front>
    <title abbrev="EPOP">JSON Web Token (JWT) Profile for OAuth 2.0 Enveloped Proof of Possession (EPOP)</title>
    <seriesInfo name="Internet-Draft" value="draft-ambekar-oauth-epop-03"/>
    <author fullname="Ashwin Ambekar">
      <organization>eBay</organization>
      <address>
        <email>ambekar@gmail.com</email>
        <email>aambekar@ebay.com</email>
      </address>
    </author>
    <date year="2026" month="July" day="23"/>
    <area>Security</area>
    <workgroup>Web Authorization Protocol</workgroup>
    <keyword>EPOP</keyword>
    <keyword>oauth</keyword>
    <keyword>proof-of-possession</keyword>
    <keyword>sender-constrained</keyword>
    <keyword>token binding</keyword>
    <keyword>jwt profile</keyword>
    <keyword>token profile</keyword>
    <abstract>
      <?line 70?>

<t>This specification defines a profile for OAuth 2.0 sender-constrained credentials in which access tokens and refresh tokens are cryptographically bound to the client's private key as a single inseparable envelope. Authorization code flows are also covered: the client declares its public key binding via <tt>cnf.jkt</tt> in the EPOP token presented at the token endpoint, ensuring the authorization code can only be exchanged by the key-holding client; the code itself travels as the standard <tt>code</tt> form parameter. Unlike existing mechanisms, EPOP provides proof-of-possession uniformly across both JWT and opaque access tokens, and across HTTP and non-HTTP transports. The profile extends sender-constraining beyond HTTP to non-HTTP transports including MQTT, Kafka, the Model Context Protocol (MCP), gRPC, and SASL-based protocols such as those defined in <xref target="RFC7628"/>. It introduces atomic proof-of-possession key rotation, enabling clients to rotate key pairs without disrupting active sessions, and an offline-derived client nonce (<tt>cnonce</tt>) that eliminates the server-issued nonce round-trip required by existing mechanisms — enabling stateless proof validation critical for non-HTTP and high-throughput deployments. Authorization servers, resource servers, and clients from different vendors can implement this profile interoperably.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://asambeka.github.io/epop/draft-ambekar-oauth-epop.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ambekar-oauth-epop/"/>.
      </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/asambeka/epop"/>.</t>
    </note>
  </front>
  <middle>
    <?line 74?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>OAuth 2.0 <xref target="RFC6749"/> access tokens are bearer tokens by default: any party in possession of a token can use it, regardless of whether that party is the legitimate client to which the token was issued. This property makes token theft a practical attack — intercepted tokens can be replayed without further credential material.</t>
      <t>Sender-constraining mechanisms address this by cryptographically binding a token to the client's key pair so that possession of the token alone is insufficient to use it. Demonstrating Proof of Possession (DPoP) <xref target="RFC9449"/> introduced sender-constraining for HTTP-based OAuth flows. However, DPoP relies on HTTP-specific request parameters (<tt>htm</tt>, <tt>htu</tt>) and a server-issued nonce mechanism that requires an additional round-trip and imposes per-client nonce state management on servers — making it unsuitable for non-HTTP transports such as MQTT, Kafka, gRPC, and SASL-based protocols. DPoP's <tt>ath</tt> claim binds opaque access tokens on HTTP, but provides no sender-constraining path for opaque tokens on non-HTTP transports. No existing specification provides an interoperable sender-constraining profile that operates uniformly across both JWT and opaque access tokens, and across both HTTP and non-HTTP transports.</t>
      <t>Opaque access tokens are widely deployed in production environments for their revocability, privacy properties, and compact size. Selective disclosure mechanisms such as SD-JWT (<xref target="RFC9901"/>) require JWT structure and cannot be applied to opaque tokens. No existing sender-constraining mechanism addresses opaque access tokens outside of HTTP. This leaves a broad class of production deployments — those using opaque tokens with Kafka, MQTT, gRPC, or SASL-based protocols — without any interoperable proof-of-possession mechanism.</t>
      <t>A further deployment challenge with DPoP is the requirement to propagate two distinct HTTP headers — <tt>Authorization: DPoP &lt;token&gt;</tt> and <tt>DPoP: &lt;proof&gt;</tt> — as an inseparable pair through every layer of a distributed system. API gateways, reverse proxies, and service-mesh sidecars must each be updated to recognize and forward the <tt>DPoP</tt> header; many intermediaries strip non-standard headers by default. Every resource server onboarded to DPoP must separately implement dual-header awareness and proof validation. A single hop that discards the <tt>DPoP</tt> header silently invalidates the proof-of-possession guarantee for the entire request chain, creating a widespread integration burden across heterogeneous microservice deployments.</t>
      <t>This document defines the Enveloped Proof of Possession (EPOP) profile for OAuth 2.0 credentials. For token-based flows, the OAuth credential — access token or refresh token — is nested within the <tt>ntk</tt> (Nested Token) claim (<xref target="token-payload"/>) of a signed JSON Web Token (JWT) <xref target="RFC7519"/> envelope; the credential and the proof of possession are a single, inseparable cryptographic object signed with the client's private key. In authorization code flows, the code travels as the standard <tt>code</tt> form parameter while the EPOP token carries only <tt>cnf.jkt</tt>, declaring the client's key binding before the AS issues any tokens. The <tt>ntk</tt> claim accommodates both JWT and opaque access tokens using the same envelope and validation path, providing uniform proof-of-possession regardless of token format.</t>
      <t>The profile introduces a protocol-neutral <tt>rctx</tt> (Request Context) claim (<xref target="token-payload"/>) that replaces the HTTP-specific <tt>htm</tt>/<tt>htu</tt> claims of DPoP, enabling EPOP tokens to operate over any transport without protocol-specific adaptation. An offline-derived client nonce (<tt>cnonce</tt>) (<xref target="cnonce"/>) computed from public inputs eliminates the server-issued nonce round-trip required by <xref target="RFC9449"/>, enabling stateless proof validation particularly suited to non-HTTP and high-throughput transports. The profile further defines atomic proof-of-possession key rotation, in which a client introduces a new key pair during a token refresh without disrupting the active session, and extends coverage to the full OAuth token lifecycle including token revocation and token exchange. Together, these properties make EPOP the first sender-constraining profile to cover all four combinations: JWT tokens over HTTP, opaque tokens over HTTP, JWT tokens over non-HTTP transports, and opaque tokens over non-HTTP transports.</t>
      <t>For SASL-based protocols, this document defines <tt>OAUTHEPOP</tt>, a new SASL mechanism extending <xref target="RFC7628"/> with sender-constraining support. All behaviors defined in <xref target="RFC7628"/> remain in effect; this document adds only the EPOP-specific authentication type and key binding verification.</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?>

<t>Conformance requirements for EPOP-issuing Authorization Servers, EPOP-validating Resource Servers, and EPOP Clients are summarized in <xref target="conformance"/>.</t>
      <t>The following terms are used throughout this document:</t>
      <dl>
        <dt>EPOP Token:</dt>
        <dd>
          <t>A signed JWT (<xref target="RFC7519"/>) with <tt>typ: epop+jwt</tt>, signed by the client's private key. Contains an OAuth 2.0 credential in the <tt>ntk</tt> claim when used for resource access, token refresh, token revocation, or token exchange. In authorization code exchange and PAR flows, contains only <tt>cnf.jkt</tt> for key binding; the authorization code travels as the standard <tt>code</tt> form parameter and is never embedded in <tt>ntk</tt>.</t>
        </dd>
        <dt>Nested Token (ntk):</dt>
        <dd>
          <t>The OAuth 2.0 credential (access token, refresh token, or another EPOP token for key rotation) embedded inside an EPOP token's payload. Not present in EPOP tokens used for authorization code exchange.</t>
        </dd>
        <dt>Request Context (rctx):</dt>
        <dd>
          <t>A JSON object in the EPOP payload that identifies the target resource and protocol action, replacing the HTTP-specific <tt>htm</tt>/<tt>htu</tt> claims of DPoP.</t>
        </dd>
        <dt>Client Nonce (cnonce):</dt>
        <dd>
          <t>An HMAC value derived offline from the client's public key, an optional server-supplied seed, and a time-step counter, providing replay resistance without server-issued nonce state.</t>
        </dd>
        <dt>Authorization Server (AS):</dt>
        <dd>
          <t>A server that issues OAuth 2.0 tokens to clients. As defined in <xref target="RFC6749"/>.</t>
        </dd>
        <dt>Resource Server (RS):</dt>
        <dd>
          <t>A server that hosts protected resources and accepts OAuth 2.0 tokens. As defined in <xref target="RFC6749"/>.</t>
        </dd>
        <dt>Client:</dt>
        <dd>
          <t>An application that requests OAuth 2.0 tokens and uses them to access protected resources. As defined in <xref target="RFC6749"/>.</t>
        </dd>
        <dt>JWK Thumbprint:</dt>
        <dd>
          <t>The SHA-256 thumbprint of a JSON Web Key, computed as defined in <xref target="RFC7638"/>.</t>
        </dd>
      </dl>
      <section anchor="conformance">
        <name>Conformance</name>
        <t>This specification defines normative requirements for three conformance roles:</t>
        <dl>
          <dt>EPOP-issuing Authorization Server:</dt>
          <dd>
            <t>An AS that issues EPOP-bound tokens <bcp14>MUST</bcp14> bind all issued tokens to the client's public key via <tt>cnf.jkt</tt>, <bcp14>MUST</bcp14> validate EPOP tokens presented at the token endpoint per <xref target="validating-epop"/>, and <bcp14>MUST</bcp14> publish EPOP capability metadata per <xref target="discovery"/>.</t>
          </dd>
          <dt>EPOP-validating Resource Server:</dt>
          <dd>
            <t>An RS that accepts EPOP tokens <bcp14>MUST</bcp14> verify the outer envelope signature, <bcp14>MUST</bcp14> validate <tt>rctx</tt> members when <tt>rctx</tt> is present, and <bcp14>MUST</bcp14> verify <tt>cnf.jkt</tt> against the key in the EPOP token header per <xref target="validating-epop"/>.</t>
          </dd>
          <dt>EPOP Client:</dt>
          <dd>
            <t>A client producing EPOP tokens <bcp14>MUST</bcp14> sign each token with the private key whose public component appears in the EPOP token header, <bcp14>MUST NOT</bcp14> reuse <tt>jti</tt> values, and <bcp14>MUST</bcp14> derive <tt>cnonce</tt> per <xref target="cnonce"/> when the AS requires it.</t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="token-profile">
      <name>EPOP Token Profile</name>
      <t>An EPOP token is a signed JWT (<xref target="RFC7519"/>) with <tt>typ: epop+jwt</tt>.</t>
      <section anchor="token-header">
        <name>Header</name>
        <dl>
          <dt><tt>typ</tt></dt>
          <dd>
            <t><bcp14>REQUIRED</bcp14>. <bcp14>MUST</bcp14> be <tt>epop+jwt</tt>.</t>
          </dd>
          <dt><tt>alg</tt></dt>
          <dd>
            <t><bcp14>REQUIRED</bcp14>. Asymmetric signature algorithm. Edwards curve algorithms are <bcp14>RECOMMENDED</bcp14> for their superior security, performance, and payload compactness; see <xref target="sec-algorithm-selection"/>. Symmetric algorithms (<tt>HS*</tt>) and <tt>none</tt> <bcp14>MUST NOT</bcp14> be used.</t>
          </dd>
          <dt><tt>jwk</tt></dt>
          <dd>
            <t><bcp14>REQUIRED</bcp14>. The client's public key as a JWK (<xref target="RFC7517"/>). <bcp14>MUST NOT</bcp14> contain private key material.</t>
          </dd>
        </dl>
        <t>Example header:</t>
        <sourcecode type="json"><![CDATA[
{
  "typ": "epop+jwt",
  "alg": "EdDSA",
  "jwk": {
    "kty": "OKP",
    "crv": "Ed25519",
    "x": "<base64url-encoded-x>"
  }
}
]]></sourcecode>
      </section>
      <section anchor="token-payload">
        <name>Payload</name>
        <dl>
          <dt><tt>jti</tt></dt>
          <dd>
            <t><bcp14>REQUIRED</bcp14>. Unique JWT ID with high entropy (see <xref target="sec-replay-prevention"/>). Servers <bcp14>MUST</bcp14> maintain a replay cache keyed on <tt>jti</tt>.</t>
          </dd>
          <dt><tt>iat</tt></dt>
          <dd>
            <t><bcp14>REQUIRED</bcp14>. Issued-at Unix timestamp. Servers <bcp14>MUST</bcp14> reject tokens older than the server-defined maximum EPOP lifetime or issued in the future beyond clock skew. EPOP tokens <bcp14>MUST</bcp14> be short-lived, per-request credentials. The <tt>exp</tt> claim <bcp14>MUST NOT</bcp14> be included; the validity window is controlled entirely by the server's <tt>iat</tt>-based lifetime policy and, when <tt>cnonce</tt> is required, by <tt>epop_cnonce_step_seconds</tt>.</t>
          </dd>
          <dt><tt>ntk</tt></dt>
          <dd>
            <t>CONDITIONAL. The nested OAuth 2.0 credential. <bcp14>REQUIRED</bcp14> for resource access, token refresh, token revocation, and introspection. OMITTED in authorization code exchange flows; the authorization code travels as the standard <tt>code</tt> form parameter. JWT credentials (access tokens, refresh tokens, and inner EPOP tokens for key rotation) are encoded as compact-serialized JWTs; opaque credentials are Base64URL-encoded opaque strings.</t>
          </dd>
          <dt><tt>cnonce</tt></dt>
          <dd>
            <t><bcp14>RECOMMENDED</bcp14>. Offline-derived client nonce (see <xref target="cnonce"/>). <bcp14>MUST</bcp14> be included when the server publishes <tt>epop_cnonce_required: true</tt>.</t>
          </dd>
          <dt><tt>rctx</tt></dt>
          <dd>
            <t><bcp14>OPTIONAL</bcp14>. Request context object. When present, all recognized members <bcp14>MUST</bcp14> be validated by the server. Unrecognized members <bcp14>MUST</bcp14> be ignored. Future <tt>rctx</tt> member names will be registered in the EPOP Request Context Members registry (<xref target="iana-rctx"/>).</t>
          </dd>
          <dt><tt>rctx.res</tt></dt>
          <dd>
            <t><bcp14>OPTIONAL</bcp14>. URI or URN of the target resource or endpoint.</t>
          </dd>
          <dt><tt>rctx.method</tt></dt>
          <dd>
            <t><bcp14>RECOMMENDED</bcp14>. Protocol action string. Case-insensitive for HTTP methods; case-sensitive otherwise.</t>
          </dd>
          <dt><tt>rctx.id</tt></dt>
          <dd>
            <t><bcp14>OPTIONAL</bcp14>. Client-generated correlation ID for async or multiplexed protocols.</t>
          </dd>
          <dt><tt>cnf.jkt</tt></dt>
          <dd>
            <t>CONDITIONAL. SHA-256 JWK Thumbprint (<xref target="RFC7638"/>) of the client's public key. <bcp14>REQUIRED</bcp14> in authorization code exchange and in the inner envelope of a key rotation request. <bcp14>SHOULD</bcp14> be omitted on routine resource access and simple refresh where the key is already bound to the token.</t>
          </dd>
        </dl>
        <t>Example payload (resource access):</t>
        <sourcecode type="json"><![CDATA[
{
  "jti": "A8B2B026-6C81-4A8C-A403-0F225E3DFEED",
  "iat": 1775749791,
  "ntk": "<credential>",
  "cnonce": "<base64url-hmac-value>",
  "rctx": {
    "res": "https://api.example.com/orders",
    "method": "GET"
  }
}
]]></sourcecode>
      </section>
    </section>
    <section anchor="creating-epop">
      <name>Issuing and Constructing EPOP Tokens</name>
      <t>The client <bcp14>MUST</bcp14> have an asymmetric key pair (private key held exclusively by the client; public key embedded in every EPOP header), a reliable source of high-entropy identifiers for <tt>jti</tt>, and a trusted clock for <tt>iat</tt>.</t>
      <t>An EPOP token is a JWS (<xref target="RFC7515"/>) signed with the client's private key, carrying the header and payload claims defined in <xref target="token-header"/> and <xref target="token-payload"/>. The compact serialization is transmitted as:</t>
      <ul spacing="normal">
        <li>
          <t><strong>Token endpoint and PAR</strong>: the <tt>epop</tt> form parameter in the POST body, preserving the <tt>Authorization</tt> header for client authentication.</t>
        </li>
        <li>
          <t><strong>Resource server</strong>: <tt>Authorization: EPOP &lt;compact-serialized-epop-token&gt;</tt> per <xref target="RFC7235"/>.</t>
        </li>
      </ul>
      <t>When the AS issues tokens in response to a valid EPOP request, it <bcp14>MUST</bcp14> bind the issued credential to the client's public key by including <tt>cnf.jkt</tt> — the SHA-256 JWK Thumbprint (<xref target="RFC7638"/>) of the EPOP token's <tt>jwk</tt> — in the response. For opaque tokens, the AS <bcp14>MUST</bcp14> record this binding server-side for use by the introspection endpoint. The AS <bcp14>MUST NOT</bcp14> issue EPOP-bound tokens unless the EPOP token has been successfully validated per <xref target="validating-epop"/>.</t>
      <t>The token endpoint response <bcp14>MUST</bcp14> include <tt>"token_type": "EPOP"</tt> for all EPOP-bound credentials, per <xref target="RFC6749"/> Section 5.1. This signals to the client that the issued token must be presented using the <tt>Authorization: EPOP</tt> scheme at the RS.</t>
    </section>
    <section anchor="validating-epop">
      <name>Validating an EPOP Token</name>
      <t>To validate an EPOP token, the receiving server <bcp14>MUST</bcp14> ensure all of the following:</t>
      <ol spacing="normal" type="1"><li>
          <t>The <tt>typ</tt> header value is <tt>epop+jwt</tt>.</t>
        </li>
        <li>
          <t>The <tt>jwk</tt> header is a valid asymmetric public key with no private key material.</t>
        </li>
        <li>
          <t>The JWS signature verifies with the public key in <tt>jwk</tt>.</t>
        </li>
        <li>
          <t>The <tt>iat</tt> is within an acceptable window, accounting for clock skew and the server's maximum EPOP lifetime policy.</t>
        </li>
        <li>
          <t>The <tt>jti</tt> has not been seen before; record it and reject any future token presenting the same value.</t>
        </li>
        <li>
          <t>If the server requires <tt>cnonce</tt> (i.e., <tt>epop_cnonce_required</tt> is <tt>true</tt> in its discovery document), the <tt>cnonce</tt> claim <bcp14>MUST</bcp14> be present. If <tt>cnonce</tt> is present, it <bcp14>MUST</bcp14> be valid for the current time-step (see <xref target="cnonce-validation"/>).</t>
        </li>
        <li>
          <t>If <tt>rctx</tt> is present, its members match the current request context; unrecognized members <bcp14>MUST</bcp14> be ignored.</t>
        </li>
        <li>
          <t>If <tt>ntk</tt> is present, <tt>sha256(jwk)</tt> <bcp14>MUST</bcp14> equal <tt>cnf.jkt</tt> from the nested credential (see <xref target="ntk-validation"/>). This check <bcp14>MUST</bcp14> be performed after steps 1–3 pass.</t>
        </li>
      </ol>
      <t>These checks apply at both the AS (token endpoint, PAR) and RS (resource access). The server <bcp14>MUST</bcp14> reject the request with an appropriate error (see <xref target="error-responses"/>) if any check fails.</t>
      <section anchor="error-responses">
        <name>Error Responses</name>
        <t>When a server rejects an EPOP token, it <bcp14>MUST</bcp14> respond as follows.</t>
        <t>At the <strong>token endpoint</strong> (AS), validation failures <bcp14>MUST</bcp14> result in an HTTP 400 response with an OAuth error body per <xref target="RFC6749"/> Section 5.2. The <tt>error</tt> value <bcp14>MUST</bcp14> be <tt>invalid_request</tt> for structural failures (e.g., missing <tt>typ</tt>, invalid <tt>jwk</tt> format) and <tt>invalid_grant</tt> for credential failures (e.g., expired <tt>iat</tt>, replayed <tt>jti</tt>, invalid <tt>cnonce</tt>, <tt>cnf.jkt</tt> mismatch).</t>
        <t>At the <strong>resource server</strong>, validation failures <bcp14>MUST</bcp14> result in an HTTP 401 response with a <tt>WWW-Authenticate</tt> challenge using the <tt>EPOP</tt> scheme per <xref target="RFC7235"/>:</t>
        <sourcecode type="http"><![CDATA[
HTTP/1.1 401 Unauthorized
WWW-Authenticate: EPOP error="invalid_token",
                  error_description="EPOP token validation failed"
]]></sourcecode>
        <t>The <tt>error</tt> parameter <bcp14>MUST</bcp14> be <tt>invalid_token</tt> for any EPOP envelope or key binding failure. Servers <bcp14>MAY</bcp14> include <tt>error_description</tt> with a human-readable explanation. Servers <bcp14>MUST NOT</bcp14> reveal which specific validation step failed, as such information could aid an attacker.</t>
      </section>
      <section anchor="ntk-validation">
        <name>Nested Credential Validation</name>
        <t>When <tt>ntk</tt> is present and the outer envelope has passed steps 1–7, the server <bcp14>MUST</bcp14> perform the key binding check (step 8) and then validate the nested credential:</t>
        <ul spacing="normal">
          <li>
            <t><strong>JWT (access or refresh token)</strong>: verify signature, <tt>iss</tt>, <tt>exp</tt>, <tt>aud</tt>, and scopes.</t>
          </li>
          <li>
            <t><strong>Opaque token</strong>: introspect with the AS per <xref target="RFC7662"/>.</t>
          </li>
          <li>
            <t><strong>Inner EPOP (key rotation)</strong>: apply steps 1–8 to the inner envelope; <tt>cnf.jkt</tt> in the inner envelope identifies the new key.</t>
          </li>
        </ul>
        <t>The key binding check requires <tt>sha256(outer jwk) == cnf.jkt</tt> from the nested credential. If this check fails, the server <bcp14>MUST</bcp14> reject the request with <tt>invalid_token</tt>.</t>
      </section>
    </section>
    <section anchor="flows">
      <name>OAuth 2.0 Flows with EPOP</name>
      <section anchor="as-flows">
        <name>Authorization Server Flows</name>
        <section anchor="as-protocol-changes">
          <name>OAuth 2.0 Protocol Changes Summary</name>
          <table>
            <thead>
              <tr>
                <th align="left">Element</th>
                <th align="left">Change</th>
                <th align="left">Impacted Flows</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">
                  <tt>grant_type</tt></td>
                <td align="left">New values: <tt>epop_code_grant</tt>, <tt>epop_refresh_token</tt></td>
                <td align="left">Authorization code exchange, token refresh</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>epop</tt></td>
                <td align="left">New form parameter; carries compact-serialized EPOP token</td>
                <td align="left">Authorization code exchange, token refresh, PAR</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>actor_token_type</tt></td>
                <td align="left">New values: <tt>urn:ietf:params:oauth:token-type:epop_access_token</tt>, <tt>urn:ietf:params:oauth:token-type:epop_refresh_token</tt></td>
                <td align="left">Token exchange</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>token_type_hint</tt></td>
                <td align="left">New value: <tt>epop_token</tt></td>
                <td align="left">Token revocation, token introspection</td>
              </tr>
              <tr>
                <td align="left">Issued token response</td>
                <td align="left">AS <bcp14>MUST</bcp14> include <tt>cnf.jkt</tt> binding in all issued tokens</td>
                <td align="left">All grant flows</td>
              </tr>
              <tr>
                <td align="left">PKCE (<tt>code_challenge</tt>)</td>
                <td align="left">Elevated from <bcp14>RECOMMENDED</bcp14> to <bcp14>REQUIRED</bcp14></td>
                <td align="left">Authorization code exchange, PAR</td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="auth-code-flow">
          <name>Authorization Code Flow with PKCE</name>
          <t>PKCE (<xref target="RFC7636"/>) is <bcp14>REQUIRED</bcp14> in all EPOP authorization code flows. PKCE and EPOP protect complementary attack surfaces: PKCE binds the authorization request to the token request; EPOP binds the authorization code to the client's key pair. Without PKCE, an attacker who intercepts the authorization code could generate their own key pair and wrap the code in a valid EPOP token signed with their key. Together they provide end-to-end chain of trust from the authorization request through token issuance (see <xref target="fig-auth-code-flow"/>).</t>
          <figure anchor="fig-auth-code-flow">
            <name>Authorization Code Flow with EPOP and PKCE</name>
            <artwork><![CDATA[
Client                           AS                         RS
  |                              |                           |
  |-- 1. Authorization Request ->|                           |
  |   (code_challenge, PKCE)     |                           |
  |                              |                           |
  |<-- 2. Authorization Code ----|                           |
  |                              |                           |
  |-- 3. Token Request (POST) -->|                           |
  |   grant_type=epop_code_grant |  (abbreviated; full URN)  |
  |   epop=<token: cnf.jkt,rctx>|                           |
  |   + code, code_verifier      |                           |
  |   (form parameters)          |                           |
  |                              |                           |
  |<-- 4. Access Token ----------|                           |
  |   (cnf.jkt bound to key)     |                           |
  |                              |                           |
  |-- 5. Resource Request ---------------------------------->|
  |   Authorization: EPOP <epop-token: AT in ntk, rctx>     |
  |                              |                           |
  |<-- 6. Protected Response --------------------------------|
]]></artwork>
          </figure>
          <t>Token request (Step 3):</t>
          <sourcecode type="http"><![CDATA[
NOTE: '\' line wrapping per {{RFC8792}}

POST /token HTTP/1.1
Host: as.example.com
Content-Type: application/x-www-form-urlencoded
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW

grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Aepop_code_grant
&code=SplxlOBeZQQYbYS6WxSbIA
&client_id=s6BhdRkqt3
&redirect_uri=https%3A%2F%2Fclient.example.com%2Fcb
&code_verifier=bEaL42izcC-o-xBk0K2vuJ6U-y1p9r_wW2dFWIWgjz-
&epop=eyJ0eXAiOiJlcG9wK2p3dCIsImFsZyI6IkVkRFNBIiwiandrIjp7Imt0eSI6Ik9\
LUCIsImNydiI6IkVkMjU1MTkiLCJ4IjoiMTFxWUFZS3hDcmZWU183VHlXUUhPZzdoY3Z\
QYXBpTWxyd0lhYVBjSFVSbyJ9fQ.eyJqdGkiOiJBOEIyQjAyNi02QzgxLTRBOEMtQTQw\
My0wRjIyNUUzREZFRUQiLCJpYXQiOjE3NzU3NDk3OTEsImNuZiI6eyJqa3QiOiJrUHJL\
X3FteFZXYVlWQTl3d0JGNkl1bzN2Vnp6N1R4SENUd1hCeWdyUzRrIn0sInJjdHgiOnsi\
cmVzIjoiaHR0cHM6Ly9hcy5leGFtcGxlLmNvbS90b2tlbiIsIm1ldGhvZCI6IlBPU1Qi\
fX0.I45kzp-niCPrDZoHUA_n9vor9lqjBD7Pw3hNcaecAVkCKl2yyZIUqZseociCHt_U\
U60NFDLx6kEE8NWIR4aYAQ
]]></sourcecode>
          <t>Decoded EPOP token payload for this request (<tt>cnf.jkt</tt> declares the client's key binding; <tt>ntk</tt> is absent because the authorization code travels as the <tt>code</tt> form parameter per standard OAuth 2.0):</t>
          <sourcecode type="json"><![CDATA[
{
  "jti": "A8B2B026-6C81-4A8C-A403-0F225E3DFEED",
  "iat": 1775749791,
  "cnf": {
    "jkt": "kPrK_qmxVWaYVA9wwBF6Iuo3vVzz7TxHCTwXBygrS4k"
  },
  "rctx": {
    "res": "https://as.example.com/token",
    "method": "POST"
  }
}
]]></sourcecode>
          <t>Token endpoint response (Step 4):</t>
          <sourcecode type="json"><![CDATA[
{
  "access_token": "<compact-serialized-jwt-access-token>",
  "token_type": "EPOP",
  "expires_in": 3600
}
]]></sourcecode>
          <t>The issued access token returned by the AS carries the <tt>cnf.jkt</tt> binding:</t>
          <sourcecode type="json"><![CDATA[
{
  "sub": "jdoe@acme.org",
  "aud": ["https://api.example.com"],
  "cnf": {
    "jkt": "kPrK_qmxVWaYVA9wwBF6Iuo3vVzz7TxHCTwXBygrS4k"
  },
  "iat": 1775749800,
  "exp": 1775753400
}
]]></sourcecode>
        </section>
        <section anchor="refresh-flow">
          <name>Token Refresh Flow</name>
          <t>The client wraps the refresh token in the <tt>ntk</tt> claim of an EPOP token and submits it using the <tt>epop_refresh_token</tt> grant type:</t>
          <sourcecode type="http"><![CDATA[
POST /token HTTP/1.1
Host: as.example.com
Content-Type: application/x-www-form-urlencoded
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW

grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Aepop_refresh_token
&client_id=s6BhdRkqt3
&epop=<compact-serialized-epop-token>
]]></sourcecode>
          <section anchor="simple-refresh">
            <name>Simple Refresh</name>
            <t>The EPOP token wraps the refresh token directly in <tt>ntk</tt>:</t>
            <sourcecode type="json"><![CDATA[
{
  "jti": "<unique-id>",
  "iat": "<unix-time>",
  "ntk": "<refresh-token-opaque-or-jwt>",
  "rctx": { "res": "https://as.example.com/token", "method": "POST" }
}
]]></sourcecode>
            <t>After standard EPOP validation (<xref target="validating-epop"/>), the AS validates the nested refresh token. For an opaque token, the AS looks it up in the server-side store, verifies it is not revoked or expired, and confirms the associated key matches <tt>sha256(outer jwk)</tt>. For a JWT refresh token, the AS verifies the signature, <tt>iss</tt>, <tt>exp</tt>, and <tt>jti</tt>, then confirms <tt>cnf.jkt == sha256(outer jwk)</tt>.</t>
          </section>
          <section anchor="key-rotation-refresh">
            <name>Key Rotation Refresh</name>
            <t>Key rotation uses a two-layer structure. The inner envelope is a Simple Refresh EPOP token (signed with the OLD key) with one addition: <tt>cnf.jkt</tt> set to the thumbprint of the NEW key. The outer envelope, signed with the NEW key, carries the compact-serialized inner EPOP token in <tt>ntk</tt>:</t>
            <sourcecode type="json"><![CDATA[
{
  "jti": "<unique-id-outer>",
  "iat": "<unix-time>",
  "ntk": "<compact-serialized-inner-epop-token>"
}
]]></sourcecode>
            <t>Standard EPOP validation (<xref target="validating-epop"/>) applies to both envelopes. Beyond that, the AS verifies the key handoff chain: <tt>sha256(inner jwk)</tt> <bcp14>MUST</bcp14> match the key previously bound to the refresh token, and <tt>sha256(outer jwk)</tt> <bcp14>MUST</bcp14> equal <tt>inner cnf.jkt</tt>. On success, the AS issues new tokens bound to <tt>sha256(outer jwk)</tt>, atomically updates the server-side key binding, and revokes the old key for this session. The old key's authorization of the new key's introduction, combined with the new key's simultaneous proof of possession, provides a non-repudiable chain of custody.</t>
          </section>
        </section>
        <section anchor="token-introspection">
          <name>Token Introspection</name>
          <t>Token introspection (<xref target="RFC7662"/>) for EPOP tokens supports two modes.</t>
          <section anchor="introspection-inner">
            <name>Mode 1: Inner Token Introspection</name>
            <t>The caller extracts the access token from the <tt>ntk</tt> claim of the received EPOP token and submits it to the introspection endpoint with the appropriate <tt>token_type_hint</tt> (e.g., <tt>access_token</tt>):</t>
            <sourcecode type="http"><![CDATA[
POST /introspect HTTP/1.1
Host: as.example.com
Content-Type: application/x-www-form-urlencoded
Authorization: Basic <rs-credentials>

token=<access-token-extracted-from-ntk>
&token_type_hint=access_token
]]></sourcecode>
            <t>The introspection response includes <tt>cnf.jkt</tt>. The caller <bcp14>MUST</bcp14> verify that <tt>sha256(EPOP token signing key)</tt> equals the <tt>cnf.jkt</tt> returned in the response. This check confirms that the EPOP envelope was signed by the key legitimately bound to the nested token.</t>
          </section>
          <section anchor="introspection-epop">
            <name>Mode 2: Full EPOP Token Introspection</name>
            <t>The caller sends the entire EPOP token to the introspection endpoint with <tt>token_type_hint=epop_token</tt>:</t>
            <sourcecode type="http"><![CDATA[
POST /introspect HTTP/1.1
Host: as.example.com
Content-Type: application/x-www-form-urlencoded
Authorization: Basic <rs-credentials>

token=<epop-token-received-from-client>
&token_type_hint=epop_token
]]></sourcecode>
            <t>The AS validates the EPOP envelope signature, extracts the credential from <tt>ntk</tt>, and validates it. The AS <bcp14>MUST</bcp14> verify that <tt>sha256(EPOP token signing key)</tt> equals the <tt>cnf.jkt</tt> in the nested token before returning a response. This check prevents a caller from presenting a valid EPOP envelope wrapping a token not bound to that key.</t>
            <t>In both modes the introspection response includes <tt>cnf.jkt</tt>. For opaque tokens, <tt>cnf.jkt</tt> is the server-side registered client EPOP public key; for JWT tokens it is extracted from the token's own <tt>cnf.jkt</tt> claim. The <tt>token_type</tt> field reflects the type of the inner access token in <tt>ntk</tt>, not the outer EPOP envelope.</t>
            <sourcecode type="json"><![CDATA[
{
  "active": true,
  "token_type": "Bearer",
  "sub": "jdoe@acme.org",
  "iss": "https://as.example.com",
  "aud": ["https://api.example.com"],
  "scope": "read:orders",
  "iat": 1775748567,
  "exp": 1775752167,
  "cnf": {
    "jkt": "NLp8qGUJ1ywXs4ayYFLHfh8TA0crUe4g78UyBfx5j0Y"
  }
}
]]></sourcecode>
          </section>
        </section>
        <section anchor="token-exchange">
          <name>Token Exchange</name>
          <t>Clients can exchange an EPOP-wrapped token for a new token using the token exchange framework (<xref target="RFC8693"/>). In this flow the client is the actor — it acts on behalf of a subject and proves its identity by presenting the EPOP token as the <tt>actor_token</tt>. The <tt>subject_token</tt> carries the token being exchanged on behalf of the subject; <tt>subject_token_type</tt> identifies its format. The <tt>actor_token_type</tt> identifies the EPOP token format using the <tt>epop_access_token</tt> token type identifier (<xref target="iana-token-types"/>):</t>
          <sourcecode type="http"><![CDATA[
POST /token HTTP/1.1
Host: as.example.com
Content-Type: application/x-www-form-urlencoded
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW

grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Atoken-exchange
&subject_token=<subject-access-token>
&subject_token_type=urn%3Aietf%3Aparams%3Aoauth%3Atoken-type%3Aaccess_token
&actor_token=<compact-serialized-epop-token>
&actor_token_type=urn%3Aietf%3Aparams%3Aoauth%3Atoken-type%3Aepop_access_token
&requested_token_type=urn%3Aietf%3Aparams%3Aoauth%3Atoken-type%3Aepop_access_token
]]></sourcecode>
          <t>The AS <bcp14>MUST</bcp14> validate the EPOP envelope per <xref target="validating-epop"/> before processing the exchange. The AS <bcp14>MUST</bcp14> also validate the <tt>subject_token</tt> independently per its token type. The AS issues a new EPOP-wrapped access token bound to the same client public key, or to a new key if the exchange request includes key rotation.</t>
          <t>Token exchange response:</t>
          <sourcecode type="json"><![CDATA[
{
  "access_token": "<compact-serialized-epop-bound-access-token>",
  "issued_token_type": "urn:ietf:params:oauth:token-type:epop_access_token",
  "token_type": "EPOP",
  "expires_in": 3600
}
]]></sourcecode>
          <t>The issued access token carries <tt>cnf.jkt</tt> bound to the client's public key, as in all EPOP flows.</t>
        </section>
        <section anchor="token-revocation">
          <name>Token Revocation</name>
          <t>Clients revoke EPOP-wrapped tokens using the token revocation framework (<xref target="RFC7009"/>). The client constructs and signs the EPOP token containing the credential to be revoked, then submits it as the <tt>token</tt> parameter with a <tt>token_type_hint</tt> identifying the credential type:</t>
          <sourcecode type="http"><![CDATA[
POST /revoke HTTP/1.1
Host: as.example.com
Content-Type: application/x-www-form-urlencoded
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW

token=<compact-serialized-epop-token>
&token_type_hint=epop_token
]]></sourcecode>
          <t>The AS <bcp14>MUST</bcp14> validate the EPOP envelope per <xref target="validating-epop"/> before processing revocation. The <tt>token_type_hint</tt> value <bcp14>MUST</bcp14> be <tt>epop_token</tt> (<xref target="iana-token-type-hint"/>).</t>
          <t>The requirement that the client construct and sign the EPOP envelope provides proof-of-possession on revocation: an attacker who captured a token but does not hold the corresponding private key cannot revoke it. This is a deliberate security improvement over plain RFC 7009 revocation, where any party holding the raw token value can submit a revocation request.</t>
        </section>
        <section anchor="par">
          <name>Pushed Authorization Requests</name>
          <t>For PAR (<xref target="RFC9126"/>), the client <bcp14>MAY</bcp14> declare its public key fingerprint at the PAR endpoint to pre-bind the authorization code to the client's key before the browser redirect. The client includes the EPOP token as the <tt>epop</tt> form parameter — with <tt>cnf.jkt</tt> and <tt>rctx</tt> but no <tt>ntk</tt> — alongside the standard PAR request parameters. The <tt>Authorization</tt> header carries client authentication as usual. PKCE parameters (<tt>code_challenge</tt>, <tt>code_challenge_method</tt>) <bcp14>MUST</bcp14> be included in the PAR request (this specification elevates PKCE from <bcp14>RECOMMENDED</bcp14> in <xref target="RFC9126"/> to <bcp14>REQUIRED</bcp14> in all EPOP flows); the subsequent token endpoint request <bcp14>MUST</bcp14> include <tt>code_verifier</tt>.</t>
          <t>EPOP token payload for the PAR request:</t>
          <sourcecode type="json"><![CDATA[
{
  "jti": "<unique-id>",
  "iat": "<unix-time>",
  "cnf": { "jkt": "<client-public-key-thumbprint>" },
  "rctx": {
    "res": "https://as.example.com/par",
    "method": "POST"
  }
}
]]></sourcecode>
          <t>HTTP request:</t>
          <sourcecode type="http"><![CDATA[
POST /par HTTP/1.1
Host: as.example.com
Content-Type: application/x-www-form-urlencoded
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW

response_type=code
&client_id=s6BhdRkqt3
&redirect_uri=https%3A%2F%2Fclient.example.com%2Fcb
&scope=read%3Aorders
&code_challenge=E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM
&code_challenge_method=S256
&epop=<compact-serialized-epop-token>
]]></sourcecode>
          <t>The AS verifies the EPOP signature, extracts <tt>cnf.jkt</tt>, and records it against the <tt>request_uri</tt> it returns. Once a <tt>cnf.jkt</tt> is registered via PAR, that key binding is final for the lifetime of the resulting authorization code. If the EPOP token presented at the token endpoint declares a different <tt>cnf.jkt</tt> than the one recorded at the PAR endpoint, the AS <bcp14>MUST</bcp14> reject the request.</t>
        </section>
        <section anchor="unsupported-flows">
          <name>Unsupported Flows</name>
          <section anchor="client-credentials-flow">
            <name>Client Credentials Flow</name>
            <t>Client credentials flow is not covered by this specification.</t>
          </section>
          <section anchor="auth-request-binding">
            <name>Authorization Request Key Binding Not Supported</name>
            <t>Binding a public key thumbprint inside the authorization request URL (analogous to <tt>dpop_jkt</tt> in <xref target="RFC9449"/> Section 10) is not supported; see <xref target="sec-auth-request-binding"/> for the security rationale.</t>
          </section>
        </section>
      </section>
      <section anchor="rs-flows">
        <name>Resource Server Flows</name>
        <section anchor="resource-access">
          <name>Resource Access</name>
          <t>The client sends the EPOP token in the HTTP <tt>Authorization</tt> header using the <tt>EPOP</tt> authentication scheme (<xref target="RFC7235"/>). No <tt>Authorization: Bearer</tt> header is used.</t>
          <t>EPOP token payload:</t>
          <sourcecode type="json"><![CDATA[
{
  "jti": "626545DF-CD19-48EA-BB85-974130E012B5",
  "iat": 1775749791,
  "ntk": "<compact-serialized-access-token>",
  "rctx": {
    "res": "https://api.example.com/orders",
    "method": "GET"
  }
}
]]></sourcecode>
          <t>HTTP request:</t>
          <sourcecode type="http"><![CDATA[
GET /orders HTTP/1.1
Host: api.example.com
Authorization: EPOP <compact-serialized-epop-token>
]]></sourcecode>
          <t>The RS verifies the outer envelope, then extracts and validates the access token from <tt>ntk</tt> as defined in <xref target="ntk-validation"/>.</t>
        </section>
        <section anchor="non-http-protocols">
          <name>Non-HTTP and Agentic Protocols</name>
          <t>The EPOP token structure is identical for non-HTTP protocols; only <tt>rctx</tt> values differ. The <tt>rctx.res</tt> field accommodates any URI or URN:</t>
          <table>
            <thead>
              <tr>
                <th align="left">Protocol</th>
                <th align="left">rctx.res</th>
                <th align="left">rctx.method</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">HTTPS</td>
                <td align="left">
                  <tt>https://api.example.com/orders</tt></td>
                <td align="left">
                  <tt>GET</tt></td>
              </tr>
              <tr>
                <td align="left">MQTT</td>
                <td align="left">
                  <tt>urn:mqtt:broker:sensors/temperature</tt></td>
                <td align="left">
                  <tt>PUBLISH</tt></td>
              </tr>
              <tr>
                <td align="left">MCP</td>
                <td align="left">
                  <tt>urn:mcp:server:filesystem</tt></td>
                <td align="left">
                  <tt>tools/call</tt></td>
              </tr>
              <tr>
                <td align="left">Kafka</td>
                <td align="left">
                  <tt>urn:kafka:cluster:orders-topic</tt></td>
                <td align="left">
                  <tt>Produce</tt></td>
              </tr>
              <tr>
                <td align="left">gRPC</td>
                <td align="left">
                  <tt>urn:grpc:service:helloworld.Greeter</tt></td>
                <td align="left">
                  <tt>SayHello</tt></td>
              </tr>
            </tbody>
          </table>
          <t>The <tt>rctx.id</tt> field lets the server correlate the EPOP token with an asynchronous response — critical in multiplexed or streaming protocols where request/response pairs are not strictly sequential:</t>
          <sourcecode type="json"><![CDATA[
{
  "jti": "9F3A1C22-4D87-4B3E-BC12-0A5E8D7F1234",
  "iat": 1775750000,
  "ntk": "<compact-serialized-access-token>",
  "rctx": {
    "res": "urn:mcp:server:filesystem",
    "method": "tools/call",
    "id": "req_5521"
  }
}
]]></sourcecode>
        </section>
        <section anchor="sasl">
          <name>SASL Integration</name>
          <t>This section extends <xref target="RFC7628"/> to support Enveloped Proof of Possession. All behaviors defined in <xref target="RFC7628"/> — including the GS2 (<xref target="RFC5801"/>) message structure, connection-establishment scope, server error challenge format, and error handling — apply to <tt>OAUTHEPOP</tt> unless explicitly stated otherwise in this section.</t>
          <section anchor="oauthepop-mechanism">
            <name>OAUTHEPOP Mechanism</name>
            <t><tt>OAUTHEPOP</tt> is a new SASL mechanism following the structure of <xref target="RFC7628"/> Section 3. Implementors should note that EPOP compact serializations (header, payload, and signature) may be significantly larger than a plain bearer token; SASL implementations <bcp14>MUST</bcp14> support initial client response buffers large enough to carry the full compact-serialized EPOP JWT. It introduces <tt>EPOP</tt> as the OAuth authentication type for the <tt>auth</tt> field of the GS2 initial client response.</t>
            <t>The <tt>auth</tt> field for <tt>OAUTHEPOP</tt> is defined as:</t>
            <artwork><![CDATA[
auth-field = "auth" "=" "EPOP" SP epop-token kvsep
]]></artwork>
            <t>where <tt>epop-token</tt> is the compact-serialized EPOP JWT as defined in <xref target="token-profile"/> and <tt>kvsep</tt> is <tt>%x01</tt> per <xref target="RFC7628"/>. All other fields in the GS2 initial client response (<tt>host</tt>, <tt>port</tt>, GS2 header, final <tt>kvsep</tt>) are unchanged from <xref target="RFC7628"/> Section 3.</t>
            <t>Example initial client response (using <tt>%x01</tt> represented as <tt>&lt;SOH&gt;</tt>):</t>
            <artwork><![CDATA[
n,,<SOH>auth=EPOP <compact-epop-token><SOH>host=mail.example.com<SOH>port=993<SOH><SOH>
]]></artwork>
          </section>
          <section anchor="oauthbearer-compat">
            <name>OAUTHBEARER Backward Compatibility</name>
            <t>Servers advertising <tt>OAUTHBEARER</tt> <bcp14>MAY</bcp14> also accept EPOP tokens by recognizing <tt>auth=EPOP</tt> in the initial client response. When a server receives <tt>auth=EPOP</tt> over the <tt>OAUTHBEARER</tt> mechanism, it <bcp14>MUST</bcp14> treat the value as a compact-serialized EPOP JWT and apply the key binding check defined in <xref target="ntk-validation"/>.</t>
            <t>The server determines whether the nested access token in <tt>ntk</tt> is EPOP-bound as follows:</t>
            <ul spacing="normal">
              <li>
                <t><strong>Opaque nested access token</strong>: The server calls token introspection (<xref target="RFC7662"/>). If the introspection response includes <tt>cnf.jkt</tt>, the token is EPOP-bound; the server <bcp14>MUST</bcp14> verify <tt>sha256(outer jwk) == cnf.jkt</tt> before accepting the connection.</t>
              </li>
              <li>
                <t><strong>JWT nested access token</strong>: The server inspects the <tt>typ</tt> claim of the access token extracted from <tt>ntk</tt>. If <tt>typ == "epop+jwt"</tt>, the token is EPOP-bound; the server <bcp14>MUST</bcp14> apply the same key binding check.</t>
              </li>
            </ul>
            <t>Servers <bcp14>SHOULD</bcp14> advertise <tt>OAUTHEPOP</tt> in SASL capability responses when EPOP is supported and <bcp14>SHOULD</bcp14> list it ahead of <tt>OAUTHBEARER</tt>. Clients that support EPOP <bcp14>MUST</bcp14> use <tt>OAUTHEPOP</tt> when the server advertises it.</t>
          </section>
        </section>
        <section anchor="userinfo-endpoint">
          <name>UserInfo Endpoint</name>
          <t>The client presents an EPOP token wrapping the access token at the UserInfo endpoint:</t>
          <sourcecode type="json"><![CDATA[
{
  "jti": "<unique-id>",
  "iat": "<unix-time>",
  "ntk": "<access-token>",
  "rctx": {
    "res": "https://as.example.com/userinfo",
    "method": "GET"
  }
}
]]></sourcecode>
          <sourcecode type="http"><![CDATA[
GET /userinfo HTTP/1.1
Host: as.example.com
Authorization: EPOP <compact-serialized-epop-token>
]]></sourcecode>
          <t>The AS validates the EPOP token per <xref target="validating-epop"/>, verifying <tt>rctx.res</tt> matches its UserInfo endpoint URI, then returns UserInfo claims.</t>
        </section>
        <section anchor="rs-binding">
          <name>Resource Server Binding</name>
          <section anchor="key-binding-enforcement">
            <name>Key Binding Enforcement</name>
            <t>Every JWT access token issued under EPOP carries a <tt>cnf.jkt</tt> claim — the SHA-256 thumbprint of the client's EPOP public key. When the RS receives an EPOP-wrapped request:</t>
            <ol spacing="normal" type="1"><li>
                <t>It verifies the outer EPOP signature using the <tt>jwk</tt> embedded in the header.</t>
              </li>
              <li>
                <t>It extracts the access token from <tt>ntk</tt> and validates it (signature, <tt>exp</tt>, <tt>aud</tt>, scopes).</t>
              </li>
              <li>
                <t>It computes <tt>sha256(outer jwk header key)</tt> and compares it to <tt>cnf.jkt</tt> inside the access token.</t>
              </li>
            </ol>
            <t>If the two values differ, the RS <bcp14>MUST</bcp14> reject the request with <tt>invalid_token</tt>. This check prevents an attacker from wrapping a stolen access token in their own EPOP envelope.</t>
          </section>
          <section anchor="early-exit">
            <name>Early-Exit Pattern</name>
            <t>The <tt>rctx</tt> check (<xref target="validating-epop"/> Step 7) <bcp14>SHOULD</bcp14> occur before nested credential validation (<xref target="ntk-validation"/>). If <tt>rctx.res</tt> or <tt>rctx.method</tt> does not match the current request, the RS <bcp14>SHOULD</bcp14> reject immediately without decoding or verifying the access token. This is the primary defense against replay of an EPOP token from one endpoint at another within the token's short validity window.</t>
          </section>
          <section anchor="rs-opaque-tokens">
            <name>RS Handling of Opaque Access Tokens</name>
            <t>When the access token in <tt>ntk</tt> is opaque, the RS <bcp14>MUST</bcp14> introspect the received EPOP token with the AS (<xref target="RFC7662"/>), passing it as the <tt>token</tt> parameter with <tt>token_type_hint=epop_token</tt> so the AS can validate the envelope and extract the inner token:</t>
            <sourcecode type="http"><![CDATA[
POST /introspect HTTP/1.1
Host: as.example.com
Content-Type: application/x-www-form-urlencoded
Authorization: Basic <rs-credentials>

token=<epop-token-received-from-client>
&token_type_hint=epop_token
]]></sourcecode>
            <t>The introspection response includes the <tt>cnf.jkt</tt> claim:</t>
            <sourcecode type="json"><![CDATA[
{
  "active": true,
  "sub": "jdoe@acme.org",
  "scope": "read:orders",
  "cnf": {
    "jkt": "NLp8qGUJ1ywXs4ayYFLHfh8TA0crUe4g78UyBfx5j0Y"
  },
  "exp": 1775752167
}
]]></sourcecode>
          </section>
          <section anchor="rs-state-management">
            <name>RS State Management for Opaque Tokens</name>
            <t>The RS <bcp14>MUST NOT</bcp14> cache introspection results beyond the EPOP token's validity window. Since EPOP tokens are very short duration per-request credentials, a stale introspection cache could cause the RS to validate a post-rotation request against the pre-rotation key.</t>
            <t>When the client performs key rotation (<xref target="key-rotation-refresh"/>), the AS <bcp14>MUST</bcp14> atomically update its server-side registry before issuing any new tokens. Introspection responses for access tokens issued after rotation <bcp14>MUST</bcp14> reflect the new client EPOP public key.</t>
            <table>
              <thead>
                <tr>
                  <th align="left">Scenario</th>
                  <th align="left">RS Obligation</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td align="left">Opaque access token, no caching</td>
                  <td align="left">Call introspection per request; use returned <tt>cnf.jkt</tt> for binding check</td>
                </tr>
                <tr>
                  <td align="left">Opaque access token, cached introspection</td>
                  <td align="left">Cache <bcp14>MUST</bcp14> expire at or before the EPOP token validity window; <bcp14>MUST NOT</bcp14> reuse across key rotation</td>
                </tr>
                <tr>
                  <td align="left">Key mismatch detected</td>
                  <td align="left">Reject with <tt>invalid_token</tt>; <bcp14>MUST NOT</bcp14> fall back to a previously cached key</td>
                </tr>
                <tr>
                  <td align="left">Opaque refresh token key rotation (AS-side)</td>
                  <td align="left">AS <bcp14>MUST</bcp14> atomically update server-side key registration; partial update <bcp14>MUST NOT</bcp14> be possible</td>
                </tr>
              </tbody>
            </table>
          </section>
        </section>
      </section>
    </section>
    <section anchor="cnonce">
      <name>Client Nonce (cnonce)</name>
      <section anchor="cnonce-overview">
        <name>Overview</name>
        <t><tt>cnonce</tt> is an offline-derived nonce that time-bounds each EPOP token to a discrete step window. Unlike the DPoP server-issued nonce (<xref target="RFC9449"/> Section 8), it requires no server round-trip and carries no server-side nonce state, making it particularly suited to non-HTTP transports and high-throughput deployments. <tt>cnonce</tt> reduces the replay opportunity within a window; the <tt>jti</tt> replay cache (<xref target="validating-epop"/> Step 5) remains the primary replay prevention mechanism and <bcp14>MUST</bcp14> be maintained regardless.</t>
      </section>
      <section anchor="cnonce-notation">
        <name>Notation</name>
        <t>The following notation is used in this section:</t>
        <dl>
          <dt><tt>SPKI</tt></dt>
          <dd>
            <t>DER-encoded SubjectPublicKeyInfo of the client public key in the EPOP token header.</t>
          </dd>
          <dt><tt>X</tt></dt>
          <dd>
            <t>Time-step duration in seconds, taken from <tt>epop_cnonce_step_seconds</tt>.</t>
          </dd>
          <dt><tt>seed</tt></dt>
          <dd>
            <t>Optional 32-byte deployment seed from <tt>epop_cnonce_seed</tt>. When absent, treated as the empty octet string.</t>
          </dd>
          <dt><tt>HKDF-SHA256(ikm, salt, info, len)</tt></dt>
          <dd>
            <t>HKDF with SHA-256 per <xref target="RFC5869"/>, producing <tt>len</tt> octets.</t>
          </dd>
          <dt><tt>HMAC-SHA256(key, data)</tt></dt>
          <dd>
            <t>HMAC with SHA-256 per <xref target="RFC2104"/>.</t>
          </dd>
          <dt><tt>BASE64URL(octets)</tt></dt>
          <dd>
            <t>Base64url encoding without padding per <xref target="RFC4648"/> Section 5.</t>
          </dd>
          <dt><tt>UTF8(str)</tt></dt>
          <dd>
            <t>UTF-8 encoding of string <tt>str</tt> per <xref target="RFC3629"/>.</t>
          </dd>
          <dt><tt>UINT64BE(n)</tt></dt>
          <dd>
            <t>8-octet big-endian encoding of integer <tt>n</tt>.</t>
          </dd>
          <dt><tt>||</tt></dt>
          <dd>
            <t>Octet string concatenation.</t>
          </dd>
        </dl>
      </section>
      <section anchor="cnonce-computation">
        <name>Computation</name>
        <t>The time-step counter is:</t>
        <artwork><![CDATA[
T = floor(CurrentUnixTime / X)
]]></artwork>
        <t>The per-client key material is derived once per key pair and re-derived on seed rotation:</t>
        <artwork><![CDATA[
key_material = HKDF-SHA256(seed || SPKI, SHA256(SPKI), "epop-cnonce-v1", 32)
]]></artwork>
        <t>When <tt>seed</tt> is absent, <tt>ikm = SPKI</tt>. The optional <tt>seed</tt> scopes derivation per deployment so that cnonce values from clients under different seeds are non-interchangeable.</t>
        <t>The cnonce value is:</t>
        <artwork><![CDATA[
cnonce = BASE64URL(HMAC-SHA256(key_material, UTF8(jti) || UINT64BE(T)))
]]></artwork>
        <t>where <tt>jti</tt> is the EPOP token's own unique identifier.</t>
      </section>
      <section anchor="cnonce-validation">
        <name>Verification</name>
        <t>The server (AS or RS) derives <tt>key_material</tt> identically and verifies:</t>
        <artwork><![CDATA[
cnonce == BASE64URL(HMAC-SHA256(key_material, UTF8(jti) || UINT64BE(t)))
]]></artwork>
        <t>for any <tt>t</tt> ∈ <tt>{T-1, T, T+1}</tt>. This window absorbs clock skew of up to one step. If no value of <tt>t</tt> satisfies the equality, the server <bcp14>MUST</bcp14> reject the token. A cnonce satisfying the time-window check but carrying a replayed <tt>jti</tt> is caught by the replay cache (<xref target="validating-epop"/> Step 5).</t>
        <t>When <tt>epop_cnonce_seed</tt> is rotated, the server <bcp14>MUST</bcp14> update <tt>epop_cnonce_seed_id</tt> simultaneously so that clients re-derive <tt>key_material</tt>.</t>
      </section>
      <section anchor="cnonce-seed-domain">
        <name>Seed Domain Isolation</name>
        <t>The optional <tt>seed</tt> parameter scopes <tt>key_material</tt> derivation so that cnonce values produced under one seed cannot validate against a server holding a different seed. This property is most valuable when the AS and RS each hold their own independently chosen seed.</t>
        <t>Because every EPOP token is destination-bound — tied to a single server via <tt>rctx</tt> — there is no correctness requirement for the AS and RS to share a seed. Using distinct seeds provides the following security benefits:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Cross-domain replay resistance.</strong> A cnonce computed for the AS domain cannot satisfy verification at the RS, and vice versa, even within the same time-step window. This supplements the <tt>rctx</tt> check with a cryptographic barrier at the key-derivation level.</t>
          </li>
          <li>
            <t><strong>Independent seed rotation.</strong> Each server can rotate its seed on its own schedule without coordinating with the other, reducing operational coupling between the AS and RS.</t>
          </li>
          <li>
            <t><strong>Blast-radius limitation.</strong> If a seed value is inadvertently exposed (e.g., via a misconfigured metadata endpoint), only the cnonce namespace of that server is affected; the other server's namespace remains intact.</t>
          </li>
        </ul>
        <t>Sharing a seed across the AS and RS confers none of these benefits and is <bcp14>NOT RECOMMENDED</bcp14>. Both servers <bcp14>SHOULD</bcp14> rotate <tt>epop_cnonce_seed</tt> periodically to further limit the window in which precomputed cnonce values remain valid.</t>
      </section>
    </section>
    <section anchor="discovery">
      <name>Discovery Metadata</name>
      <t>Authorization Servers that support EPOP <bcp14>MUST</bcp14> publish their capabilities in the OAuth Authorization Server Metadata document (<xref target="RFC8414"/>), available at <tt>/.well-known/oauth-authorization-server</tt> (or <tt>/.well-known/openid-configuration</tt> for OpenID Connect providers). Resource Servers publish EPOP capabilities in the OAuth Protected Resource Metadata document (<xref target="RFC9728"/>), available at <tt>/.well-known/oauth-protected-resource</tt>.</t>
      <section anchor="epop-metadata-fields">
        <name>Metadata Fields</name>
        <t>Each server publishes its own <tt>epop_cnonce_seed</tt>, <tt>epop_cnonce_seed_id</tt>, and <tt>epop_cnonce_step_seconds</tt> values independently. Clients <bcp14>MUST</bcp14> read the target server's discovery document and use the values from that document when deriving <tt>cnonce</tt> for requests to that server. Because EPOP tokens are destination-bound — each is tied to a single endpoint via <tt>rctx</tt> — the AS and RS never need to verify the same cnonce value. Using distinct seeds for the AS and RS improves security by isolating their cnonce derivation namespaces and providing stronger protection against precomputed cnonce attacks: an attacker who learns one server's seed gains no advantage against the other. AS and RS <bcp14>SHOULD</bcp14> also rotate <tt>epop_cnonce_seed</tt> periodically for further protection against precomputation; see <xref target="cnonce-seed-domain"/>.</t>
        <dl>
          <dt><tt>epop_supported</tt></dt>
          <dd>
            <t>String; AS and RS. <bcp14>REQUIRED</bcp14> when EPOP is active. Server EPOP posture: <tt>"disabled"</tt> — clients <bcp14>MUST NOT</bcp14> send EPOP tokens; <tt>"recommended"</tt> — EPOP accepted but non-EPOP requests also accepted; <tt>"required"</tt> — requests without a valid EPOP token <bcp14>MUST</bcp14> be rejected.</t>
          </dd>
          <dt><tt>epop_ntk_types_supported</tt></dt>
          <dd>
            <t>Array of strings; AS and RS. <bcp14>REQUIRED</bcp14> when <tt>epop_supported</tt> is not <tt>"disabled"</tt>. Credential formats accepted inside <tt>ntk</tt>: <tt>"jwt"</tt> and/or <tt>"opaque"</tt>.</t>
          </dd>
          <dt><tt>epop_key_rotation_supported</tt></dt>
          <dd>
            <t>Boolean; AS only. Default: <tt>false</tt>. When <tt>true</tt>, the server supports the two-layer EPOP key rotation flow (<xref target="key-rotation-refresh"/>). Clients <bcp14>MUST</bcp14> check this field before attempting key rotation.</t>
          </dd>
          <dt><tt>epop_cnonce_required</tt></dt>
          <dd>
            <t>Boolean; AS and RS. Default: <tt>false</tt>. When <tt>true</tt>, the server <bcp14>MUST</bcp14> reject EPOP tokens that omit <tt>cnonce</tt>. Clients <bcp14>MUST</bcp14> include <tt>cnonce</tt> if either the AS or RS sets this to <tt>true</tt>.</t>
          </dd>
          <dt><tt>epop_cnonce_step_seconds</tt></dt>
          <dd>
            <t>Integer; AS and RS. <bcp14>REQUIRED</bcp14> when <tt>epop_cnonce_required</tt> is <tt>true</tt>. Time-step duration in seconds; both client and server compute <tt>T = floor(utc_now() / epop_cnonce_step_seconds)</tt>. Clients use the value from the target server's discovery document. AS and RS <bcp14>SHOULD</bcp14> use the same value to simplify operational management; divergent step sizes are functionally correct but weaken the replay bound at whichever server uses the longer window.</t>
          </dd>
          <dt><tt>epop_cnonce_seed</tt></dt>
          <dd>
            <t>String (Base64URL, 32 bytes); AS and RS. <bcp14>OPTIONAL</bcp14>. Server-specific namespace discriminator for <tt>cnonce</tt> derivation; improves security by making cnonce values non-interchangeable across servers and limiting the blast radius of seed exposure. Not a secret. AS and RS <bcp14>SHOULD</bcp14> use distinct seeds; see <xref target="cnonce-seed-domain"/>. Rotated in coordination with <tt>epop_cnonce_seed_id</tt>.</t>
          </dd>
          <dt><tt>epop_cnonce_seed_id</tt></dt>
          <dd>
            <t>String; AS and RS. <bcp14>REQUIRED</bcp14> when <tt>epop_cnonce_seed</tt> is present; <bcp14>OPTIONAL</bcp14> otherwise. Opaque identifier for the current <tt>epop_cnonce_seed</tt> on this server. Clients <bcp14>MUST</bcp14> cache each server's discovery document keyed on this value and re-derive <tt>key_material</tt> only when it changes.</t>
          </dd>
        </dl>
      </section>
      <section anchor="as-metadata-example">
        <name>AS Metadata Example</name>
        <sourcecode type="json"><![CDATA[
{
  "issuer": "https://as.example.com",
  "token_endpoint": "https://as.example.com/token",
  "epop_supported": "recommended",
  "epop_ntk_types_supported": ["jwt", "opaque"],
  "epop_key_rotation_supported": true,
  "epop_cnonce_required": true,
  "epop_cnonce_step_seconds": 30,
  "epop_cnonce_seed": "<base64url-32-bytes-as>",
  "epop_cnonce_seed_id": "as-seed-20260722T0600Z"
}
]]></sourcecode>
      </section>
      <section anchor="rs-metadata-example">
        <name>RS Metadata Example</name>
        <sourcecode type="json"><![CDATA[
{
  "resource": "https://api.example.com",
  "authorization_servers": ["https://as.example.com"],
  "epop_supported": "required",
  "epop_ntk_types_supported": ["jwt", "opaque"],
  "epop_cnonce_required": true,
  "epop_cnonce_step_seconds": 30,
  "epop_cnonce_seed": "<base64url-32-bytes-rs>",
  "epop_cnonce_seed_id": "rs-seed-20260722T0800Z"
}
]]></sourcecode>
      </section>
    </section>
    <section anchor="related-specs">
      <name>Relationship to Other Specifications</name>
      <table>
        <thead>
          <tr>
            <th align="left">RFC</th>
            <th align="left">Title</th>
            <th align="left">Relationship</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">
              <xref target="RFC7628"/></td>
            <td align="left">A Set of Simple Authentication and Security Layer (SASL) Mechanisms for OAuth</td>
            <td align="left">EPOP extends RFC 7628 by introducing <tt>EPOP</tt> as a new OAuth authentication type for the SASL <tt>auth</tt> field and defining <tt>OAUTHEPOP</tt> as a new SASL mechanism. All behaviors defined in RFC 7628 remain in effect; this document adds only the <tt>auth=EPOP</tt> field value and the key binding check that <tt>OAUTHBEARER</tt> servers apply when they encounter it.</td>
          </tr>
          <tr>
            <td align="left">
              <xref target="RFC9449"/></td>
            <td align="left">OAuth 2.0 Demonstrating Proof of Possession (DPoP)</td>
            <td align="left">EPOP generalizes the DPoP proof model: replaces <tt>htm</tt>/<tt>htu</tt> with <tt>rctx</tt> for protocol agnosticism; replaces the <tt>ath</tt> hash with <tt>ntk</tt> embedding so credential and proof travel as one object; extends coverage to refresh tokens and to authorization code flows via <tt>cnf.jkt</tt> key binding at the token endpoint (authorization codes travel as standard <tt>code</tt> form parameters and are never embedded in <tt>ntk</tt>); adds atomic key rotation and the offline <tt>cnonce</tt>. Additionally, DPoP's requirement to carry two coordinated HTTP headers (<tt>Authorization</tt> and <tt>DPoP</tt>) imposes a propagation burden on every intermediary and resource server in a distributed system; EPOP eliminates this by enveloping the proof inside the token, so a single <tt>Authorization</tt> header carries the inseparable credential-and-proof object through all hops without requiring middleware changes. Additionally, DPoP's <tt>ath</tt> mechanism for opaque access tokens is coupled to HTTP request parameters, leaving opaque tokens on non-HTTP transports without a sender-constraining path. EPOP's <tt>ntk</tt> claim handles opaque and JWT tokens identically across all transports.</td>
          </tr>
          <tr>
            <td align="left">
              <xref target="RFC7636"/></td>
            <td align="left">Proof Key for Code Exchange (PKCE)</td>
            <td align="left">EPOP elevates PKCE from <bcp14>RECOMMENDED</bcp14> to <bcp14>REQUIRED</bcp14> in all authorization code flows.</td>
          </tr>
          <tr>
            <td align="left">
              <xref target="RFC8414"/></td>
            <td align="left">OAuth 2.0 Authorization Server Metadata</td>
            <td align="left">EPOP adds new discovery fields to the well-known document: <tt>epop_supported</tt>, <tt>epop_ntk_types_supported</tt>, <tt>epop_key_rotation_supported</tt>, and the <tt>epop_cnonce_*</tt> family.</td>
          </tr>
          <tr>
            <td align="left">
              <xref target="RFC7638"/></td>
            <td align="left">JSON Web Key (JWK) Thumbprint</td>
            <td align="left">EPOP uses the SHA-256 JWK thumbprint (<tt>cnf.jkt</tt>) as its primary key binding primitive — embedded in every issued token and checked by the RS as its main defense against token substitution.</td>
          </tr>
          <tr>
            <td align="left">
              <xref target="RFC7662"/></td>
            <td align="left">OAuth 2.0 Token Introspection</td>
            <td align="left">EPOP extends introspection responses to include <tt>cnf.jkt</tt>. For opaque tokens the AS returns the server-side registered client EPOP public key; for JWT tokens it is extracted from the token's own claim.</td>
          </tr>
          <tr>
            <td align="left">
              <xref target="RFC9126"/></td>
            <td align="left">OAuth 2.0 Pushed Authorization Requests (PAR)</td>
            <td align="left">EPOP extends PAR to let the client declare <tt>cnf.jkt</tt> at the earliest point in the flow, pre-binding the authorization code before the browser redirect.</td>
          </tr>
          <tr>
            <td align="left">
              <xref target="RFC5869"/></td>
            <td align="left">HMAC-based Key Derivation Function (HKDF)</td>
            <td align="left">EPOP uses HKDF-SHA256 to derive a per-client key from the optional server-controlled <tt>epop_cnonce_seed</tt> and the client's public key, enabling stateless offline cnonce computation.</td>
          </tr>
          <tr>
            <td align="left">
              <xref target="RFC9901"/></td>
            <td align="left">Selective Disclosure for JWTs (SD-JWT)</td>
            <td align="left">SD-JWT provides selective disclosure of JWT claims but has no sender-constraining mechanism and requires JWT structure — it cannot be applied to opaque access tokens. EPOP is complementary: an SD-JWT credential can be carried in the EPOP <tt>ntk</tt> claim, gaining sender-constraining without modifying the SD-JWT format. A profile combining EPOP and SD-JWT is left to a future document.</td>
          </tr>
        </tbody>
      </table>
    </section>
    <section anchor="performance">
      <name>Performance Considerations</name>
      <section anchor="perf-token-size">
        <name>Token Size</name>
        <t>EPOP consolidates the access token and the proof of possession into a single
token, eliminating the separate DPoP proof header. The net effect on wire size
depends on the access token format in use.</t>
        <t>The table below compares the combined size of an AT+DPoP pair against an EPOP
token for representative algorithm combinations, and shows the percentage
change (negative = EPOP is smaller; positive = EPOP is larger). Sizes include
the full Base64url-encoded token strings as they would appear on the wire.
The compressed figures approximate HTTP/2 header-compression (Huffman coding)
applied to the token value.</t>
        <table anchor="tbl-token-size">
          <name>Token size comparison: AT+DPoP vs EPOP</name>
          <thead>
            <tr>
              <th align="left">AT Format</th>
              <th align="left">Proof Algorithm</th>
              <th align="right">AT+DPoP / EPOP Raw (B)</th>
              <th align="right">Raw Δ%</th>
              <th align="right">AT+DPoP / EPOP Compressed (B)</th>
              <th align="right">Compressed Δ%</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Opaque</td>
              <td align="left">Ed25519</td>
              <td align="right">599 / 553</td>
              <td align="right">−7.7%</td>
              <td align="right">437 / 398</td>
              <td align="right">−8.9%</td>
            </tr>
            <tr>
              <td align="left">Opaque</td>
              <td align="left">RSA-256</td>
              <td align="right">1247 / 1201</td>
              <td align="right">−3.7%</td>
              <td align="right">918 / 880</td>
              <td align="right">−4.1%</td>
            </tr>
            <tr>
              <td align="left">JWT Ed25519</td>
              <td align="left">Ed25519</td>
              <td align="right">1030 / 1128</td>
              <td align="right">+9.5%</td>
              <td align="right">745 / 811</td>
              <td align="right">+8.9%</td>
            </tr>
            <tr>
              <td align="left">JWT Ed25519</td>
              <td align="left">RSA-256</td>
              <td align="right">1678 / 1776</td>
              <td align="right">+5.8%</td>
              <td align="right">1230 / 1291</td>
              <td align="right">+5.0%</td>
            </tr>
            <tr>
              <td align="left">JWT RSA-256</td>
              <td align="left">Ed25519</td>
              <td align="right">1288 / 1472</td>
              <td align="right">+14.3%</td>
              <td align="right">950 / 1050</td>
              <td align="right">+10.5%</td>
            </tr>
            <tr>
              <td align="left">JWT RSA-256</td>
              <td align="left">RSA-256</td>
              <td align="right">1936 / 2120</td>
              <td align="right">+9.5%</td>
              <td align="right">1429 / 1536</td>
              <td align="right">+7.5%</td>
            </tr>
          </tbody>
        </table>
        <t>EPOP is 4–9% smaller than AT+DPoP when the access token is opaque, because
eliminating the separate DPoP proof token removes its JOSE header, claims, and
signature overhead. When the access token is a JWT, EPOP is 6–14% larger, as
the full AT payload must be re-encoded inside the EPOP envelope; the overhead
is highest with RSA keys, where large key material is effectively carried
twice. Header compression (e.g., HPACK in HTTP/2) reduces the gap in all
cases but does not reverse the direction of the comparison.</t>
        <t>The absolute size differences in the table (46–184 bytes uncompressed) are
small relative to typical HTTP request sizes. On networks with standard MTUs
(1500 bytes) or jumbo frames (9000 bytes), these differences are unlikely to
cause additional TCP segment fragmentation for most requests. However,
deployments on legacy or constrained networks with smaller effective MTUs, or
requests already near the fragmentation boundary due to large URL paths or
other headers, may see an additional packet fragment introduced in JWT AT
configurations where EPOP is larger. Implementers with strict packet-budget
requirements on such networks should prefer opaque access tokens with Ed25519
proofs, which yield the smallest EPOP tokens.</t>
      </section>
      <section anchor="perf-computation">
        <name>Computational Overhead</name>
        <t>EPOP validation replaces the two independent verification steps required for
AT+DPoP (verify the access token, then verify the DPoP proof) with a single
nested-token validation. The cryptographic cost depends on the algorithms
chosen and is equivalent to the sum of one AT signature verification and one
proof signature verification in both approaches; EPOP does not introduce
additional cryptographic operations relative to AT+DPoP.</t>
        <t>Resource servers that implement the early-exit optimization described in
<xref target="early-exit"/> can skip inner-token decoding when the outer EPOP signature
fails, achieving better average-case performance under adversarial or
malformed-token conditions.</t>
      </section>
      <section anchor="perf-latency">
        <name>Latency and Header Processing</name>
        <t>Because EPOP is presented as a single <tt>Authorization</tt> header value, resource
servers process one token per request rather than parsing and validating two
separate headers (<tt>Authorization: DPoP ...</tt> and <tt>DPoP: &lt;proof&gt;</tt>). This
reduces per-request HTTP header parsing overhead and simplifies the
validation state machine on the resource server.</t>
        <t>For deployments using token introspection, the reduction from two
network-visible tokens to one also halves the number of token values the
resource server must convey to the introspection endpoint per request (when
full-token introspection is used; see <xref target="introspection-epop"/>).</t>
      </section>
      <section anchor="perf-guidance">
        <name>Deployment Guidance</name>
        <t>Implementers should select the EPOP deployment profile that best matches their
token format:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Opaque AT deployments</strong> gain a measurable wire-size reduction (4–9%) and
simplified transport with no increase in computational cost. EPOP is the
preferred choice.</t>
          </li>
          <li>
            <t><strong>JWT AT deployments</strong> should weigh the modest size increase (6–14%) against
the reduced parsing complexity and unified validation logic. For deployments
where header size is a significant constraint (e.g., HTTP/1.1 without
compression, constrained-device networks), issuers may consider switching to
opaque access tokens or choosing compact proof algorithms (Ed25519 over RSA)
to limit overhead.</t>
          </li>
          <li>
            <t><strong>Algorithm selection</strong> has a larger impact on total token size than the
choice between AT+DPoP and EPOP. RSA-based algorithms produce tokens
2–3× larger than elliptic-curve equivalents regardless of the token
binding mechanism used.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <section anchor="sec-token-lifetime">
        <name>Token Lifetime</name>
        <t>EPOP tokens <bcp14>MUST</bcp14> be short-lived, per-request credentials. The server defines the maximum acceptable age of the <tt>iat</tt> claim; when <tt>cnonce</tt> is required, <tt>epop_cnonce_step_seconds</tt> imposes an additional validity bound enforced independently by both the AS and RS. Short lifetimes limit the window during which a captured token remains usable and reduce the cost of maintaining the <tt>jti</tt> replay cache.</t>
      </section>
      <section anchor="sec-replay-prevention">
        <name>Replay Prevention</name>
        <t>Each EPOP token <bcp14>MUST</bcp14> include a <tt>jti</tt> value of at least 128 bits of entropy (e.g., a UUID v4 or CSPRNG-generated value) to make collisions computationally infeasible. Servers <bcp14>MUST</bcp14> maintain a replay cache keyed on <tt>jti</tt> with a TTL of at least <tt>max_epop_lifetime + clock_skew</tt>; any token whose <tt>jti</tt> appears in the cache <bcp14>MUST</bcp14> be rejected. When <tt>cnonce</tt> is also required, the time-step window narrows the effective validity period further but does not replace the cache.</t>
      </section>
      <section anchor="token-substitution">
        <name>Token Substitution</name>
        <t>The key binding check — <tt>sha256(outer jwk) == cnf.jkt</tt> from the nested credential — is the primary defense against token substitution. An attacker who captures an access token and wraps it in an EPOP envelope signed with their own key will produce a thumbprint that does not match the <tt>cnf.jkt</tt> embedded by the AS; the RS <bcp14>MUST</bcp14> reject the mismatch.</t>
        <t>For opaque access tokens, the RS <bcp14>MUST NOT</bcp14> cache introspection results beyond the EPOP token's validity window. When a client performs key rotation (<xref target="key-rotation-refresh"/>), the AS <bcp14>MUST</bcp14> atomically update its server-side key binding before issuing new tokens; a stale cached result could cause the RS to validate a post-rotation request against the pre-rotation key.</t>
      </section>
      <section anchor="cross-protocol-replay">
        <name>Cross-Protocol Replay</name>
        <t>Without <tt>rctx</tt> validation, an EPOP token captured from one protocol or endpoint could be replayed at another within the token's validity window. Servers <bcp14>MUST</bcp14> validate <tt>rctx.res</tt> and <tt>rctx.method</tt> when those claims are present. Clients <bcp14>SHOULD</bcp14> always include <tt>rctx</tt> to maximize replay resistance.</t>
      </section>
      <section anchor="sec-credential-confidentiality">
        <name>Credential Confidentiality</name>
        <t>The <tt>ntk</tt> claim embeds the full OAuth 2.0 credential inside the EPOP envelope. Unlike bearer token flows where only the token value is sensitive, the entire compact serialization carries sensitive material. TLS is <bcp14>REQUIRED</bcp14> for all EPOP token transmissions; JWE <bcp14>MAY</bcp14> be applied for additional confidentiality over transports that cannot guarantee channel security. Refresh tokens embedded in <tt>ntk</tt> are particularly sensitive. Servers and intermediaries <bcp14>MUST NOT</bcp14> log EPOP token values in plaintext; the <tt>jti</tt> claim <bcp14>SHOULD</bcp14> be used as the audit correlation identifier instead.</t>
      </section>
      <section anchor="key-rotation-security">
        <name>Key Rotation Security</name>
        <t>The AS <bcp14>MUST</bcp14> validate both the outer and inner EPOP envelopes completely before issuing new tokens or updating key bindings. Partial validation would allow an attacker who holds a captured refresh token to inject a new key by constructing a valid outer envelope while providing an invalid inner envelope.</t>
      </section>
      <section anchor="sec-pkce">
        <name>PKCE Requirement</name>
        <t>PKCE (<xref target="RFC7636"/>) is <bcp14>REQUIRED</bcp14> in all EPOP authorization code flows. Without PKCE, an attacker who intercepts the authorization code can generate their own key pair and wrap the code in a valid EPOP token signed with that key, bypassing key binding entirely. PKCE and EPOP protect complementary surfaces: PKCE binds the authorization request to the token request; EPOP binds the code to the client's key pair.</t>
      </section>
      <section anchor="sec-auth-request-binding">
        <name>Authorization Request Key Binding</name>
        <t>Binding a public key thumbprint inside the authorization request URL (as defined for DPoP in <xref target="RFC9449"/> Section 10) is not supported by this specification. Authorization requests travel through the browser redirect — an untrusted channel where a parameter can be silently replaced before the AS sees it. EPOP establishes key binding exclusively at endpoints where the client communicates directly with the AS over TLS: the token endpoint and, optionally, the PAR endpoint (<xref target="par"/>).</t>
      </section>
      <section anchor="sec-algorithm-selection">
        <name>Algorithm Selection</name>
        <t>EPOP tokens are generated per-request at high frequency; algorithm choice directly affects signing latency, token size, and security posture. The <tt>jwk</tt> embedded in every EPOP header makes key footprint particularly significant for constrained transports. Edwards curve algorithms are <bcp14>RECOMMENDED</bcp14>. Ed25519 is the primary choice — smallest public key, fastest deterministic signing, and 128-bit security adequate for short-lived credentials. Ed448 is appropriate for high-assurance environments requiring a larger security margin. <tt>ES256</tt> is acceptable where Edwards curves are unavailable. RSA algorithms <bcp14>SHOULD NOT</bcp14> be used in new implementations. Implementations <bcp14>MUST</bcp14> follow <xref target="RFC8725"/>.</t>
      </section>
      <section anchor="sec-intermediary-transparency">
        <name>Intermediary Transparency</name>
        <t>Because the EPOP proof is embedded within the token rather than transmitted as a separate header, EPOP tokens are transparent to intermediaries that forward the <tt>Authorization</tt> header without modification. Unlike DPoP, where loss of the <tt>DPoP</tt> header at any hop silently breaks proof-of-possession, EPOP's enveloped structure ensures that the proof travels with the credential through every layer of a distributed system. Resource servers <bcp14>MUST NOT</bcp14> accept EPOP tokens from which the outer envelope signature has been stripped or replaced by an intermediary; the full compact-serialized EPOP token <bcp14>MUST</bcp14> be forwarded unchanged.</t>
      </section>
      <section anchor="private-key-protection">
        <name>Private Key Protection</name>
        <t>The security of EPOP depends entirely on the client's private key remaining secret. Private key material <bcp14>MUST</bcp14> never be logged, serialized into application state, or transmitted over any channel. Implementations <bcp14>MUST</bcp14> verify that no private key fields (<tt>d</tt>, <tt>p</tt>, <tt>q</tt>, <tt>dp</tt>, <tt>dq</tt>, <tt>qi</tt>) are present in the <tt>jwk</tt> header parameter before accepting or forwarding an EPOP token.</t>
        <t>On native and mobile platforms, clients <bcp14>MUST</bcp14> use platform secure storage (e.g., Android Keystore, iOS Secure Enclave), with private key operations performed inside the secure element where available so that key material never enters application memory.</t>
        <t>In browser environments, private keys <bcp14>MUST</bcp14> be generated as non-extractable <tt>CryptoKey</tt> objects via the Web Crypto API (<tt>extractable: false</tt>). Clients <bcp14>MUST NOT</bcp14> store private keys in <tt>localStorage</tt>, <tt>sessionStorage</tt>, <tt>IndexedDB</tt>, or any JavaScript-readable store; this prevents exfiltration by XSS or injected scripts running in the same origin.</t>
        <t>EPOP tokens <bcp14>MUST</bcp14> use asymmetric signature algorithms. Symmetric algorithms such as <tt>HS256</tt> require the verifier to hold the same secret as the signer, making independent third-party verification impossible and introducing shared-secret distribution risk.</t>
      </section>
    </section>
    <section anchor="privacy">
      <name>Privacy Considerations</name>
      <section anchor="credential-visibility-in-logs">
        <name>Credential Visibility in Logs</name>
        <t>Because the <tt>ntk</tt> claim embeds the full OAuth 2.0 credential, an EPOP token is more privacy-sensitive than a typical bearer token: its compact serialization reveals the credential type, issuer, audience, and scope to any party that receives or stores it. Servers <bcp14>SHOULD</bcp14> apply data-minimization practices to audit logs — retaining only the <tt>jti</tt> and <tt>iat</tt> claims rather than the full token value. See <xref target="sec-credential-confidentiality"/> for the normative logging and TLS requirements.</t>
      </section>
      <section anchor="key-identifier-as-tracking-vector">
        <name>Key Identifier as Tracking Vector</name>
        <t>The <tt>cnf.jkt</tt> claim is a stable, long-lived public key thumbprint. If the same key pair is used across multiple authorization server or resource server deployments, the thumbprint functions as a cross-context tracking identifier. Clients <bcp14>SHOULD</bcp14> use distinct key pairs per authorization server to limit cross-context correlation. Key rotation (<xref target="key-rotation-refresh"/>) provides a mechanism for periodic key refresh independent of active sessions.</t>
      </section>
      <section anchor="resource-uri-disclosure">
        <name>Resource URI Disclosure</name>
        <t>The <tt>rctx.res</tt> field encodes the target resource URI or URN and is part of the signed EPOP envelope, visible to any party that receives or logs the token. Clients <bcp14>MUST</bcp14> use TLS for all EPOP token transmissions to limit exposure to on-path observers. Resource identifiers that encode sensitive information (e.g., user identifiers embedded in path parameters) <bcp14>SHOULD</bcp14> be avoided in <tt>rctx.res</tt>.</t>
      </section>
      <section anchor="minimal-disclosure">
        <name>Minimal Disclosure</name>
        <t>This profile does not require the EPOP envelope to carry user identity claims. User identity information belongs in the nested access token (<tt>ntk</tt>), not in the outer EPOP envelope. Implementations <bcp14>MUST NOT</bcp14> add user identity claims to the EPOP token header or payload unless required by a specific profile extension.</t>
      </section>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <section anchor="iana-http-scheme">
        <name>HTTP Authentication Scheme Registration</name>
        <t>This specification requests registration of the following entry in the "Hypertext Transfer Protocol (HTTP) Authentication Scheme Registry" (<xref target="RFC7235"/>):</t>
        <dl>
          <dt>Authentication Scheme Name:</dt>
          <dd>
            <t><tt>EPOP</tt></t>
          </dd>
          <dt>Pointer to specification text:</dt>
          <dd>
            <t><xref target="resource-access"/> and <xref target="token-profile"/> of this document.</t>
          </dd>
        </dl>
      </section>
      <section anchor="iana-grant-types">
        <name>OAuth Grant Type Registration</name>
        <t>This specification requests registration of the following entries in the "OAuth Parameters" registry (grant type sub-table) established by <xref target="RFC6749"/> Section 11.3:</t>
        <dl>
          <dt>Grant Type Name:</dt>
          <dd>
            <t><tt>urn:ietf:params:oauth:grant-type:epop_code_grant</tt></t>
          </dd>
          <dt>Change Controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
          <dt>Specification Document(s):</dt>
          <dd>
            <t><xref target="auth-code-flow"/> of this document</t>
          </dd>
          <dt>Grant Type Name:</dt>
          <dd>
            <t><tt>urn:ietf:params:oauth:grant-type:epop_refresh_token</tt></t>
          </dd>
          <dt>Change Controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
          <dt>Specification Document(s):</dt>
          <dd>
            <t><xref target="refresh-flow"/> of this document</t>
          </dd>
        </dl>
      </section>
      <section anchor="iana-oauth-params">
        <name>OAuth Parameters Registration</name>
        <t>This specification requests registration of the following entry in the "OAuth Parameters" registry established by <xref target="RFC6749"/> Section 11.2:</t>
        <dl>
          <dt>Parameter Name:</dt>
          <dd>
            <t><tt>epop</tt></t>
          </dd>
          <dt>Parameter Usage Location:</dt>
          <dd>
            <t>token request, pushed authorization request</t>
          </dd>
          <dt>Change Controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
          <dt>Specification Document(s):</dt>
          <dd>
            <t><xref target="creating-epop"/>, <xref target="auth-code-flow"/>, <xref target="refresh-flow"/>, and <xref target="par"/> of this document</t>
          </dd>
        </dl>
      </section>
      <section anchor="iana-token-type-value">
        <name>OAuth Token Type Registration</name>
        <t>This specification requests registration of the following value in the "OAuth Access Token Types" registry established by <xref target="RFC6749"/> Section 11.1:</t>
        <dl>
          <dt>Type Name:</dt>
          <dd>
            <t><tt>EPOP</tt></t>
          </dd>
          <dt>Additional Token Endpoint Response Parameters:</dt>
          <dd>
            <t>(none)</t>
          </dd>
          <dt>HTTP Authentication Scheme(s):</dt>
          <dd>
            <t><tt>EPOP</tt></t>
          </dd>
          <dt>Change Controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
          <dt>Specification Document(s):</dt>
          <dd>
            <t><xref target="creating-epop"/> and <xref target="resource-access"/> of this document</t>
          </dd>
        </dl>
      </section>
      <section anchor="iana-token-types">
        <name>OAuth Token Type Identifiers</name>
        <t>This specification requests registration of the following entries in the "OAuth URI" subregistry of the "OAuth Parameters" registry established by <xref target="RFC8693"/> Section 7.1:</t>
        <dl>
          <dt>URI:</dt>
          <dd>
            <t><tt>urn:ietf:params:oauth:token-type:epop_access_token</tt></t>
          </dd>
          <dt>Change Controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
          <dt>Specification Document(s):</dt>
          <dd>
            <t><xref target="token-exchange"/> of this document</t>
          </dd>
          <dt>URI:</dt>
          <dd>
            <t><tt>urn:ietf:params:oauth:token-type:epop_refresh_token</tt></t>
          </dd>
          <dt>Change Controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
          <dt>Specification Document(s):</dt>
          <dd>
            <t><xref target="token-exchange"/> of this document</t>
          </dd>
        </dl>
      </section>
      <section anchor="iana-token-type-hint">
        <name>OAuth Token Type Hint Registration</name>
        <t>This specification requests registration of the following value in the "OAuth Token Type Hints" registry established by <xref target="RFC7009"/> Section 4.1:</t>
        <dl>
          <dt>Token Type Hint Name:</dt>
          <dd>
            <t><tt>epop_token</tt></t>
          </dd>
          <dt>Change Controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
          <dt>Specification Document(s):</dt>
          <dd>
            <t><xref target="token-introspection"/>, <xref target="token-revocation"/>, and <xref target="rs-opaque-tokens"/> of this document</t>
          </dd>
        </dl>
      </section>
      <section anchor="iana-jwt-claims">
        <name>JWT Claims Registration</name>
        <t>This specification requests registration of the following JWT claims in the "JSON Web Token Claims" registry established by <xref target="RFC7519"/>:</t>
        <dl>
          <dt>Claim Name: <tt>ntk</tt></dt>
          <dd>
            <t>Claim Description: Nested Token — the OAuth 2.0 credential embedded inside the EPOP envelope.</t>
          </dd>
          <dt/>
          <dd>
            <t>Change Controller: IETF</t>
          </dd>
          <dt/>
          <dd>
            <t>Specification Document(s): <xref target="token-payload"/> of this document</t>
          </dd>
          <dt>Claim Name: <tt>rctx</tt></dt>
          <dd>
            <t>Claim Description: Request Context — a JSON object identifying the target resource and protocol action.</t>
          </dd>
          <dt/>
          <dd>
            <t>Change Controller: IETF</t>
          </dd>
          <dt/>
          <dd>
            <t>Specification Document(s): <xref target="token-payload"/> of this document</t>
          </dd>
          <dt>Claim Name: <tt>cnonce</tt></dt>
          <dd>
            <t>Claim Description: Client Nonce — offline-derived HMAC value for replay resistance without server-issued nonce state.</t>
          </dd>
          <dt/>
          <dd>
            <t>Change Controller: IETF</t>
          </dd>
          <dt/>
          <dd>
            <t>Specification Document(s): <xref target="cnonce"/> of this document</t>
          </dd>
        </dl>
      </section>
      <section anchor="iana-media-type">
        <name>Media Type Registration</name>
        <t>This specification requests registration of the following media type in the "Media Types" registry (<xref target="RFC6838"/>), following the convention established by <xref target="RFC9068"/> for explicitly typed JWTs and the recommendation in <xref target="RFC8725"/> Section 3.11:</t>
        <dl>
          <dt>Type name:</dt>
          <dd>
            <t><tt>application</tt></t>
          </dd>
          <dt>Subtype name:</dt>
          <dd>
            <t><tt>epop+jwt</tt></t>
          </dd>
          <dt>Required parameters:</dt>
          <dd>
            <t>n/a</t>
          </dd>
          <dt>Optional parameters:</dt>
          <dd>
            <t>n/a</t>
          </dd>
          <dt>Encoding considerations:</dt>
          <dd>
            <t>binary; see <xref target="RFC7519"/>, Section 3.1</t>
          </dd>
          <dt>Security considerations:</dt>
          <dd>
            <t>See <xref target="security"/> of this document</t>
          </dd>
          <dt>Interoperability considerations:</dt>
          <dd>
            <t>n/a</t>
          </dd>
          <dt>Published specification:</dt>
          <dd>
            <t>This document</t>
          </dd>
          <dt>Applications that use this media type:</dt>
          <dd>
            <t>OAuth 2.0 authorization servers, resource servers, and clients implementing EPOP</t>
          </dd>
          <dt>Fragment identifier considerations:</dt>
          <dd>
            <t>n/a</t>
          </dd>
          <dt>Additional information:</dt>
          <dd>
            <t>Deprecated alias names for this type: n/a</t>
          </dd>
          <dt/>
          <dd>
            <t>Magic number(s): n/a</t>
          </dd>
          <dt/>
          <dd>
            <t>File extension(s): n/a</t>
          </dd>
          <dt/>
          <dd>
            <t>Macintosh file type code(s): n/a</t>
          </dd>
          <dt>Person and email address to contact for further information:</dt>
          <dd>
            <t>Ashwin Ambekar, <eref target="mailto:ambekar@gmail.com">ambekar@gmail.com</eref></t>
          </dd>
          <dt>Intended usage:</dt>
          <dd>
            <t>COMMON</t>
          </dd>
          <dt>Restrictions on usage:</dt>
          <dd>
            <t>none</t>
          </dd>
          <dt>Author:</dt>
          <dd>
            <t>Ashwin Ambekar</t>
          </dd>
          <dt>Change controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
          <dt>Provisional registration:</dt>
          <dd>
            <t>no</t>
          </dd>
        </dl>
        <t>As specified in <xref target="token-header"/>, the value of the <tt>typ</tt> header parameter for EPOP tokens is <tt>epop+jwt</tt>, per the convention of omitting the <tt>application/</tt> prefix described in <xref target="RFC7515"/> Section 4.1.9.</t>
      </section>
      <section anchor="iana-as-metadata">
        <name>OAuth Authorization Server Metadata</name>
        <t>This specification requests registration of the following names in the "OAuth Authorization Server Metadata" registry (<xref target="RFC8414"/>):</t>
        <dl>
          <dt><tt>epop_supported</tt></dt>
          <dd>
            <t>Metadata Description: Indicates the authorization server's EPOP support posture: <tt>"disabled"</tt>, <tt>"recommended"</tt>, or <tt>"required"</tt>.</t>
          </dd>
          <dt><tt>epop_ntk_types_supported</tt></dt>
          <dd>
            <t>Metadata Description: JSON array of nested credential (<tt>ntk</tt>) formats accepted by the server: <tt>"jwt"</tt> and/or <tt>"opaque"</tt>.</t>
          </dd>
          <dt><tt>epop_key_rotation_supported</tt></dt>
          <dd>
            <t>Metadata Description: Boolean indicating whether the authorization server supports EPOP atomic key rotation (<xref target="key-rotation-refresh"/>).</t>
          </dd>
          <dt><tt>epop_cnonce_seed</tt></dt>
          <dd>
            <t>Metadata Description: Base64url-encoded 32-byte deployment seed used to scope offline client nonce (<tt>cnonce</tt>) derivation.</t>
          </dd>
          <dt><tt>epop_cnonce_step_seconds</tt></dt>
          <dd>
            <t>Metadata Description: Integer time-step duration, in seconds, used in client nonce (<tt>cnonce</tt>) computation and verification.</t>
          </dd>
          <dt><tt>epop_cnonce_seed_id</tt></dt>
          <dd>
            <t>Metadata Description: Opaque identifier for the current value of <tt>epop_cnonce_seed</tt>.</t>
          </dd>
          <dt><tt>epop_cnonce_required</tt></dt>
          <dd>
            <t>Metadata Description: Boolean indicating whether EPOP tokens presented to this server must include a <tt>cnonce</tt> claim.</t>
          </dd>
          <dt>Change Controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
          <dt>Specification Document(s):</dt>
          <dd>
            <t><xref target="epop-metadata-fields"/> of this document</t>
          </dd>
        </dl>
      </section>
      <section anchor="iana-rs-metadata">
        <name>OAuth Protected Resource Metadata</name>
        <t>This specification requests registration of the following names in the "OAuth Protected Resource Metadata" registry (<xref target="RFC9728"/>):</t>
        <dl>
          <dt><tt>epop_supported</tt></dt>
          <dd>
            <t>Metadata Description: Indicates the resource server's EPOP support posture: <tt>"disabled"</tt>, <tt>"recommended"</tt>, or <tt>"required"</tt>.</t>
          </dd>
          <dt><tt>epop_ntk_types_supported</tt></dt>
          <dd>
            <t>Metadata Description: JSON array of nested credential (<tt>ntk</tt>) formats accepted by the server: <tt>"jwt"</tt> and/or <tt>"opaque"</tt>.</t>
          </dd>
          <dt><tt>epop_cnonce_seed</tt></dt>
          <dd>
            <t>Metadata Description: Base64url-encoded 32-byte deployment seed used to scope offline client nonce (<tt>cnonce</tt>) derivation.</t>
          </dd>
          <dt><tt>epop_cnonce_step_seconds</tt></dt>
          <dd>
            <t>Metadata Description: Integer time-step duration, in seconds, used in client nonce (<tt>cnonce</tt>) computation and verification.</t>
          </dd>
          <dt><tt>epop_cnonce_seed_id</tt></dt>
          <dd>
            <t>Metadata Description: Opaque identifier for the current value of <tt>epop_cnonce_seed</tt>.</t>
          </dd>
          <dt><tt>epop_cnonce_required</tt></dt>
          <dd>
            <t>Metadata Description: Boolean indicating whether EPOP tokens presented to this server must include a <tt>cnonce</tt> claim.</t>
          </dd>
          <dt>Change Controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
          <dt>Specification Document(s):</dt>
          <dd>
            <t><xref target="epop-metadata-fields"/> of this document</t>
          </dd>
        </dl>
      </section>
      <section anchor="iana-rctx">
        <name>EPOP Request Context Members Registry</name>
        <t>This specification requests creation of a new registry, "EPOP Request Context Members", under the "OAuth Parameters" registry group. The registry is to be maintained as Specification Required per <xref target="RFC8126"/>.</t>
        <t>Initial registrations:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Member Name</th>
              <th align="left">Type</th>
              <th align="left">Description</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>res</tt></td>
              <td align="left">String</td>
              <td align="left">URI or URN of the target resource or endpoint</td>
              <td align="left">
                <xref target="token-payload"/> of this document</td>
            </tr>
            <tr>
              <td align="left">
                <tt>method</tt></td>
              <td align="left">String</td>
              <td align="left">Protocol action string</td>
              <td align="left">
                <xref target="token-payload"/> of this document</td>
            </tr>
            <tr>
              <td align="left">
                <tt>id</tt></td>
              <td align="left">String</td>
              <td align="left">Client-generated correlation ID</td>
              <td align="left">
                <xref target="token-payload"/> of this document</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="iana-sasl">
        <name>SASL Mechanism Registration</name>
        <t>This specification requests registration of the following entry in the "SASL Mechanisms" registry established by <xref target="RFC4422"/>:</t>
        <dl>
          <dt>Mechanism Name:</dt>
          <dd>
            <t><tt>OAUTHEPOP</tt></t>
          </dd>
          <dt>Security Considerations:</dt>
          <dd>
            <t>See <xref target="sasl"/> of this document.</t>
          </dd>
          <dt>Published Specification:</dt>
          <dd>
            <t>This document.</t>
          </dd>
          <dt>Intended Usage:</dt>
          <dd>
            <t>COMMON</t>
          </dd>
          <dt>Owner/Change Controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
        </dl>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC2104">
          <front>
            <title>HMAC: Keyed-Hashing for Message Authentication</title>
            <author fullname="H. Krawczyk" initials="H." surname="Krawczyk"/>
            <author fullname="M. Bellare" initials="M." surname="Bellare"/>
            <author fullname="R. Canetti" initials="R." surname="Canetti"/>
            <date month="February" year="1997"/>
            <abstract>
              <t>This document describes HMAC, a mechanism for message authentication using cryptographic hash functions. HMAC can be used with any iterative cryptographic hash function, e.g., MD5, SHA-1, in combination with a secret shared key. The cryptographic strength of HMAC depends on the properties of the underlying hash function. This memo provides information for the Internet community. This memo does not specify an Internet standard of any kind</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2104"/>
          <seriesInfo name="DOI" value="10.17487/RFC2104"/>
        </reference>
        <reference anchor="RFC3629">
          <front>
            <title>UTF-8, a transformation format of ISO 10646</title>
            <author fullname="F. Yergeau" initials="F." surname="Yergeau"/>
            <date month="November" year="2003"/>
            <abstract>
              <t>ISO/IEC 10646-1 defines a large character set called the Universal Character Set (UCS) which encompasses most of the world's writing systems. The originally proposed encodings of the UCS, however, were not compatible with many current applications and protocols, and this has led to the development of UTF-8, the object of this memo. UTF-8 has the characteristic of preserving the full US-ASCII range, providing compatibility with file systems, parsers and other software that rely on US-ASCII values but are transparent to other values. This memo obsoletes and replaces RFC 2279.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="63"/>
          <seriesInfo name="RFC" value="3629"/>
          <seriesInfo name="DOI" value="10.17487/RFC3629"/>
        </reference>
        <reference anchor="RFC4422">
          <front>
            <title>Simple Authentication and Security Layer (SASL)</title>
            <author fullname="A. Melnikov" initials="A." role="editor" surname="Melnikov"/>
            <author fullname="K. Zeilenga" initials="K." role="editor" surname="Zeilenga"/>
            <date month="June" year="2006"/>
            <abstract>
              <t>The Simple Authentication and Security Layer (SASL) is a framework for providing authentication and data security services in connection-oriented protocols via replaceable mechanisms. It provides a structured interface between protocols and mechanisms. The resulting framework allows new protocols to reuse existing mechanisms and allows old protocols to make use of new mechanisms. The framework also provides a protocol for securing subsequent protocol exchanges within a data security layer.</t>
              <t>This document describes how a SASL mechanism is structured, describes how protocols include support for SASL, and defines the protocol for carrying a data security layer over a connection. In addition, this document defines one SASL mechanism, the EXTERNAL mechanism.</t>
              <t>This document obsoletes RFC 2222. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4422"/>
          <seriesInfo name="DOI" value="10.17487/RFC4422"/>
        </reference>
        <reference anchor="RFC4648">
          <front>
            <title>The Base16, Base32, and Base64 Data Encodings</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <date month="October" year="2006"/>
            <abstract>
              <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4648"/>
          <seriesInfo name="DOI" value="10.17487/RFC4648"/>
        </reference>
        <reference anchor="RFC5801">
          <front>
            <title>Using Generic Security Service Application Program Interface (GSS-API) Mechanisms in Simple Authentication and Security Layer (SASL): The GS2 Mechanism Family</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <author fullname="N. Williams" initials="N." surname="Williams"/>
            <date month="July" year="2010"/>
            <abstract>
              <t>This document describes how to use a Generic Security Service Application Program Interface (GSS-API) mechanism in the Simple Authentication and Security Layer (SASL) framework. This is done by defining a new SASL mechanism family, called GS2. This mechanism family offers a number of improvements over the previous "SASL/ GSSAPI" mechanism: it is more general, uses fewer messages for the authentication phase in some cases, and supports negotiable use of channel binding. Only GSS-API mechanisms that support channel binding and mutual authentication are supported. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5801"/>
          <seriesInfo name="DOI" value="10.17487/RFC5801"/>
        </reference>
        <reference anchor="RFC5869">
          <front>
            <title>HMAC-based Extract-and-Expand Key Derivation Function (HKDF)</title>
            <author fullname="H. Krawczyk" initials="H." surname="Krawczyk"/>
            <author fullname="P. Eronen" initials="P." surname="Eronen"/>
            <date month="May" year="2010"/>
            <abstract>
              <t>This document specifies a simple Hashed Message Authentication Code (HMAC)-based key derivation function (HKDF), which can be used as a building block in various protocols and applications. The key derivation function (KDF) is intended to support a wide range of applications and requirements, and is conservative in its use of cryptographic hash functions. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5869"/>
          <seriesInfo name="DOI" value="10.17487/RFC5869"/>
        </reference>
        <reference anchor="RFC6838">
          <front>
            <title>Media Type Specifications and Registration Procedures</title>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="J. Klensin" initials="J." surname="Klensin"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <date month="January" year="2013"/>
            <abstract>
              <t>This document defines procedures for the specification and registration of media types for use in HTTP, MIME, and other Internet protocols. This memo documents an Internet Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="13"/>
          <seriesInfo name="RFC" value="6838"/>
          <seriesInfo name="DOI" value="10.17487/RFC6838"/>
        </reference>
        <reference anchor="RFC6749">
          <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="RFC7009">
          <front>
            <title>OAuth 2.0 Token Revocation</title>
            <author fullname="T. Lodderstedt" initials="T." role="editor" surname="Lodderstedt"/>
            <author fullname="S. Dronia" initials="S." surname="Dronia"/>
            <author fullname="M. Scurtescu" initials="M." surname="Scurtescu"/>
            <date month="August" year="2013"/>
            <abstract>
              <t>This document proposes an additional endpoint for OAuth authorization servers, which allows clients to notify the authorization server that a previously obtained refresh or access token is no longer needed. This allows the authorization server to clean up security credentials. A revocation request will invalidate the actual token and, if applicable, other tokens based on the same authorization grant.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7009"/>
          <seriesInfo name="DOI" value="10.17487/RFC7009"/>
        </reference>
        <reference anchor="RFC7235">
          <front>
            <title>Hypertext Transfer Protocol (HTTP/1.1): Authentication</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application- level protocol for distributed, collaborative, hypermedia information systems. This document defines the HTTP Authentication framework.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7235"/>
          <seriesInfo name="DOI" value="10.17487/RFC7235"/>
        </reference>
        <reference anchor="RFC7515">
          <front>
            <title>JSON Web Signature (JWS)</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 Signature (JWS) represents content secured with digital signatures or Message Authentication Codes (MACs) using JSON-based data structures. Cryptographic algorithms and identifiers for use with this specification are described in the separate JSON Web Algorithms (JWA) specification and an IANA registry defined by that specification. Related encryption capabilities are described in the separate JSON Web Encryption (JWE) specification.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7515"/>
          <seriesInfo name="DOI" value="10.17487/RFC7515"/>
        </reference>
        <reference anchor="RFC7517">
          <front>
            <title>JSON Web Key (JWK)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>A JSON Web Key (JWK) is a JavaScript Object Notation (JSON) data structure that represents a cryptographic key. This specification also defines a JWK Set JSON data structure that represents a set of JWKs. Cryptographic algorithms and identifiers for use with this specification are described in the separate JSON Web Algorithms (JWA) specification and IANA registries established by that specification.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7517"/>
          <seriesInfo name="DOI" value="10.17487/RFC7517"/>
        </reference>
        <reference anchor="RFC7519">
          <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="RFC7628">
          <front>
            <title>A Set of Simple Authentication and Security Layer (SASL) Mechanisms for OAuth</title>
            <author fullname="W. Mills" initials="W." surname="Mills"/>
            <author fullname="T. Showalter" initials="T." surname="Showalter"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="August" year="2015"/>
            <abstract>
              <t>OAuth enables a third-party application to obtain limited access to a protected resource, either on behalf of a resource owner by orchestrating an approval interaction or by allowing the third-party application to obtain access on its own behalf.</t>
              <t>This document defines how an application client uses credentials obtained via OAuth over the Simple Authentication and Security Layer (SASL) to access a protected resource at a resource server. Thereby, it enables schemes defined within the OAuth framework for non-HTTP-based application protocols.</t>
              <t>Clients typically store the user's long-term credential. This does, however, lead to significant security vulnerabilities, for example, when such a credential leaks. A significant benefit of OAuth for usage in those clients is that the password is replaced by a shared secret with higher entropy, i.e., the token. Tokens typically provide limited access rights and can be managed and revoked separately from the user's long-term password.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7628"/>
          <seriesInfo name="DOI" value="10.17487/RFC7628"/>
        </reference>
        <reference anchor="RFC7636">
          <front>
            <title>Proof Key for Code Exchange by OAuth Public Clients</title>
            <author fullname="N. Sakimura" initials="N." role="editor" surname="Sakimura"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="N. Agarwal" initials="N." surname="Agarwal"/>
            <date month="September" year="2015"/>
            <abstract>
              <t>OAuth 2.0 public clients utilizing the Authorization Code Grant are susceptible to the authorization code interception attack. This specification describes the attack as well as a technique to mitigate against the threat through the use of Proof Key for Code Exchange (PKCE, pronounced "pixy").</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7636"/>
          <seriesInfo name="DOI" value="10.17487/RFC7636"/>
        </reference>
        <reference anchor="RFC7638">
          <front>
            <title>JSON Web Key (JWK) Thumbprint</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <date month="September" year="2015"/>
            <abstract>
              <t>This specification defines a method for computing a hash value over a JSON Web Key (JWK). It defines which fields in a JWK are used in the hash computation, the method of creating a canonical form for those fields, and how to convert the resulting Unicode string into a byte sequence to be hashed. The resulting hash value can be used for identifying or selecting the key represented by the JWK that is the subject of the thumbprint.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7638"/>
          <seriesInfo name="DOI" value="10.17487/RFC7638"/>
        </reference>
        <reference anchor="RFC7662">
          <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="RFC8414">
          <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="RFC8693">
          <front>
            <title>OAuth 2.0 Token Exchange</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="A. Nadalin" initials="A." surname="Nadalin"/>
            <author fullname="B. Campbell" initials="B." role="editor" surname="Campbell"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="C. Mortimore" initials="C." surname="Mortimore"/>
            <date month="January" year="2020"/>
            <abstract>
              <t>This specification defines a protocol for an HTTP- and JSON-based Security Token Service (STS) by defining how to request and obtain security tokens from OAuth 2.0 authorization servers, including security tokens employing impersonation and delegation.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8693"/>
          <seriesInfo name="DOI" value="10.17487/RFC8693"/>
        </reference>
        <reference anchor="RFC8725">
          <front>
            <title>JSON Web Token Best Current Practices</title>
            <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
            <author fullname="D. Hardt" initials="D." surname="Hardt"/>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <date month="February" year="2020"/>
            <abstract>
              <t>JSON Web Tokens, also known as JWTs, are URL-safe JSON-based security tokens that contain a set of claims that can be signed and/or encrypted. JWTs are being widely used and deployed as a simple security token format in numerous protocols and applications, both in the area of digital identity and in other application areas. This Best Current Practices document updates RFC 7519 to provide actionable guidance leading to secure implementation and deployment of JWTs.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="225"/>
          <seriesInfo name="RFC" value="8725"/>
          <seriesInfo name="DOI" value="10.17487/RFC8725"/>
        </reference>
        <reference anchor="RFC9126">
          <front>
            <title>OAuth 2.0 Pushed Authorization Requests</title>
            <author fullname="T. Lodderstedt" initials="T." surname="Lodderstedt"/>
            <author fullname="B. Campbell" initials="B." surname="Campbell"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <author fullname="D. Tonge" initials="D." surname="Tonge"/>
            <author fullname="F. Skokan" initials="F." surname="Skokan"/>
            <date month="September" year="2021"/>
            <abstract>
              <t>This document defines the pushed authorization request (PAR) endpoint, which allows clients to push the payload of an OAuth 2.0 authorization request to the authorization server via a direct request and provides them with a request URI that is used as reference to the data in a subsequent call to the authorization endpoint.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9126"/>
          <seriesInfo name="DOI" value="10.17487/RFC9126"/>
        </reference>
        <reference anchor="RFC9449">
          <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">
          <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">
          <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">
          <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="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
        <reference anchor="RFC8792">
          <front>
            <title>Handling Long Lines in Content of Internet-Drafts and RFCs</title>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <author fullname="E. Auerswald" initials="E." surname="Auerswald"/>
            <author fullname="A. Farrel" initials="A." surname="Farrel"/>
            <author fullname="Q. Wu" initials="Q." surname="Wu"/>
            <date month="June" year="2020"/>
            <abstract>
              <t>This document defines two strategies for handling long lines in width-bounded text content. One strategy, called the "single backslash" strategy, is based on the historical use of a single backslash ('\') character to indicate where line-folding has occurred, with the continuation occurring with the first character that is not a space character (' ') on the next line. The second strategy, called the "double backslash" strategy, extends the first strategy by adding a second backslash character to identify where the continuation begins and is thereby able to handle cases not supported by the first strategy. Both strategies use a self-describing header enabling automated reconstitution of the original content.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8792"/>
          <seriesInfo name="DOI" value="10.17487/RFC8792"/>
        </reference>
        <reference anchor="RFC9068">
          <front>
            <title>JSON Web Token (JWT) Profile for OAuth 2.0 Access Tokens</title>
            <author fullname="V. Bertocci" initials="V." surname="Bertocci"/>
            <date month="October" year="2021"/>
            <abstract>
              <t>This specification defines a profile for issuing OAuth 2.0 access tokens in JSON Web Token (JWT) format. Authorization servers and resource servers from different vendors can leverage this profile to issue and consume access tokens in an interoperable manner.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9068"/>
          <seriesInfo name="DOI" value="10.17487/RFC9068"/>
        </reference>
        <reference anchor="RFC9901">
          <front>
            <title>Selective Disclosure for JSON Web Tokens</title>
            <author fullname="D. Fett" initials="D." surname="Fett"/>
            <author fullname="K. Yasuda" initials="K." surname="Yasuda"/>
            <author fullname="B. Campbell" initials="B." surname="Campbell"/>
            <date month="November" year="2025"/>
            <abstract>
              <t>This specification defines a mechanism for the selective disclosure
of individual elements of a JSON data structure used as the payload
of a JSON Web Signature (JWS). The primary use case is the selective
disclosure of JSON Web Token (JWT) claims.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9901"/>
          <seriesInfo name="DOI" value="10.17487/RFC9901"/>
        </reference>
      </references>
    </references>
    <?line 1353?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The author thanks the OAuth Working Group for their foundational work on DPoP (<xref target="RFC9449"/>), PKCE (<xref target="RFC7636"/>), and the related specifications that this document extends.</t>
      <t>The author thanks Joe DeCock (Duende Software) for observations on token size implications across access token formats and algorithm combinations.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
M1G7T9vekzI19Kgg37OFe3krc0f0FwF1WSCjs8WuvMU2akIr4jj1SMsGDfFw
2/vLX//iUSg3sosJZYYp/QNrfX1B/oyupadMvJVqXnuRYKG3ILO9mjWKDohz
/4KK0VkRyU/v/NvbWx/PhD9NRxLIUSts1V6QYQTkx9/3g+fn7WDlaOnNx0n8
7uBo/HYMv5dfvqvVLJoA0t2fVnZRvoP/sIQHP0jGg//SgyTlwR8F8lH7M/5+
1p6M7kane+Hvb9/+1v2tvf7urt093oWbxHXeR/1n2fresH9+/Ue+UvszKC2g
7PTy99M0ekZ+XRj4T8tH8A+/YIMCL3b5M5p4POseBq9Xl6OPvX0/8e/2rpde
Ld9MX65f+rPWZCt9f/tuuX/07vjd1YePfu3PRL3C2cul8Nfd6DR6Oeo937p9
tTxZ6e8fZ8fjo+z32fH68fUv1+dHJ3vH0W0Eu58ef5hsHI/zpbCN97b+Wnt9
SU+fzPoRP/3mw2XrzcV19Hr/5erxhyR6c3F09+7y6Pf2yvCgN/793WVrc+WX
F6NfLy+HZ79/7Ce/rfz+19rb337dm1y8u5v1l0bD337Z+9A++qXdnb3cGrxt
whT/6D+/xinunR4ez95+2J2dREvLbz9e3b2+OIdrb/K3F29v/1p7M1u6Pf9w
PDu5vPx4fvj70fnlW5zG5Ldf30anHw5XTj5erpwcXK8AXuKUp7/DlHH0YOUt
jp5evnj5+q+1X1eO8vDo919/+2X07u3FaKW/9PL5yfWo1f14svxLPFk/aZ2v
tg9PLvut4X74rj+Db6XH8VJ2HL/80H9xFZ3GWfTXWm/8y0dcfvDifKn34s36
69nWsDdbG4XPj/Le87vR6/HJTbe9tdRdzkfdCEHYGvWfD29+3wcwjvbOLltv
YZTBr0vN49W1648TP472z9KD35MXl7vv462bJN0a/fFh72Dj7HZleNILwt7u
L9f7r0bLs9nvx5d//J6FSS/af5G/v/xr7XJ96eTo4PXd+vXh4ebJu+Pz1eC3
3bdsejoIOeTJLgMnjmm23Et0Gx1yoyToUnMlCVRn+WhTTNAlS0w37AXoZnxc
LFl10s+EDOMSZaa15r9RuAYs1oRbwKpxyOuz9NX7P8Z3v7wLfvtld+v2du9o
/XiarNz88vHjxsXdi/2L21/3Zldpe/WawiweEbjhULintmnRCttAEunEbRQ8
+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
coVYaYJQWba1Wfv/AXj1wA54HwEA

-->

</rfc>
