<?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-01" 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-01"/>
    <author fullname="Ashwin Ambekar">
      <organization>eBay</organization>
      <address>
        <email>ambekar@gmail.com</email>
        <email>aambekar@ebay.com</email>
      </address>
    </author>
    <date year="2026" month="May" day="19"/>
    <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 67?>

<t>This specification defines a profile for OAuth 2.0 sender-constrained credentials in which authorization codes, access tokens, and refresh tokens are cryptographically bound to the client's private key as a single inseparable envelope. 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 71?>

<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. No existing specification provides an interoperable sender-constraining profile that operates uniformly across both HTTP and non-HTTP transports.</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. In this profile, the OAuth credential — authorization code, 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 entire structure, credential and proof together, is signed with the client's private key. The credential and the proof of possession are a single, inseparable cryptographic object: there is no credential without a proof.</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.</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:</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",
    "id": "req_5521"
  },
  "cnf": {
    "jkt": "<sha256-thumbprint-of-public-key>"
  }
}
]]></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>
    <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>The <tt>epop_cnonce_seed</tt>, <tt>epop_cnonce_seed_id</tt>, and <tt>epop_cnonce_step_seconds</tt> values <bcp14>MUST</bcp14> be identical in the AS and RS discovery documents. Clients <bcp14>SHOULD</bcp14> validate this consistency on startup and after any seed rotation.</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>. <bcp14>MUST</bcp14> be identical in AS and RS documents.</t>
          </dd>
          <dt><tt>epop_cnonce_seed</tt></dt>
          <dd>
            <t>String (Base64URL, 32 bytes); AS and RS. <bcp14>OPTIONAL</bcp14>. Namespace discriminator for multi-tenant deployments; mixed into the per-client HKDF derivation so cnonce values across tenants are non-interchangeable. Not a secret. <bcp14>MUST</bcp14> be identical in AS and RS documents when present. 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>. Clients <bcp14>MUST</bcp14> cache the discovery document keyed on this value and re-derive <tt>key_material</tt> only when it changes. <bcp14>MUST</bcp14> be identical in AS and RS documents.</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>",
  "epop_cnonce_seed_id": "seed-2026-q2"
}
]]></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>",
  "epop_cnonce_seed_id": "seed-2026-q2"
}
]]></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 authorization codes and refresh tokens; 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.</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>
        </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-jwt-type">
        <name>JWT Type Registration</name>
        <t>This specification requests registration of the following <tt>typ</tt> header parameter value in the "JSON Web Signature and Encryption Header Parameters" registry established by <xref target="RFC7515"/>, in accordance with <xref target="RFC8725"/> Section 3.11:</t>
        <dl>
          <dt>Type Name: <tt>epop+jwt</tt></dt>
          <dd>
            <t>Description: Enveloped Proof of Possession JWT.</t>
          </dd>
          <dt/>
          <dd>
            <t>Change Controller: IETF</t>
          </dd>
          <dt/>
          <dd>
            <t>Specification Document(s): <xref target="token-header"/> of this document</t>
          </dd>
        </dl>
      </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>
        <ul spacing="normal">
          <li>
            <t><tt>epop_supported</tt></t>
          </li>
          <li>
            <t><tt>epop_ntk_types_supported</tt></t>
          </li>
          <li>
            <t><tt>epop_key_rotation_supported</tt></t>
          </li>
          <li>
            <t><tt>epop_cnonce_seed</tt></t>
          </li>
          <li>
            <t><tt>epop_cnonce_step_seconds</tt></t>
          </li>
          <li>
            <t><tt>epop_cnonce_seed_id</tt></t>
          </li>
          <li>
            <t><tt>epop_cnonce_required</tt></t>
          </li>
        </ul>
      </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>
        <ul spacing="normal">
          <li>
            <t><tt>epop_supported</tt></t>
          </li>
          <li>
            <t><tt>epop_ntk_types_supported</tt></t>
          </li>
          <li>
            <t><tt>epop_cnonce_seed</tt></t>
          </li>
          <li>
            <t><tt>epop_cnonce_step_seconds</tt></t>
          </li>
          <li>
            <t><tt>epop_cnonce_seed_id</tt></t>
          </li>
          <li>
            <t><tt>epop_cnonce_required</tt></t>
          </li>
        </ul>
      </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="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>
      </references>
    </references>
    <?line 1252?>

<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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
kRiqHN0dxz2ylVPNVu+1Jq9Zgj5M6ghKPKwbnnJPcc6EFexeoo+cvto7wPh7
xBjNl9tVj5DzJtDB97bjHCiINkp/YVN5F+mkuM/t4XOI43wIaRpwUDBLH4eg
MwZnhKenLCzrJKGmrklc7ANltnFJGqRBdKiqBEMRsvL5w0MqeZygWPcxc6LJ
LyFA0xIvnKI0tn1bXdzmz8x7lR14cxIy696lxMDh52s2Z8VoEpNiOndk5srK
lyHxDRgJrQ26CIjbJJjwDPAd8m1b5jReTs5EGiWSQSNJNxSArXIIUVL3s9gP
0UKD6VVkmEATrSHwcyAoeXXKWptOA8uH14+u/BxOkAsKRS+JbJz/D5yTef+c
tUAAvH/gXe/h2/f4uu97jXwmtnKn+T998XX476J77Gq069XHff0bJ/8jzH45
P3s6lD5ymd/56/BxNBXRniuQLaKZugqffxToDAt8lmN5eHuRC8Ggxtvb5qSV
i7Pjqnkd33nGuaBNJYzU0GLxqI//WTLp6KNi3koeuXT476LLP9PqV0DugfuP
eR23fRW2nSVY3gBf//M4nGVoGQ8fkIW/D87C3NfqJjZRn7Uv/vOT+nqpl8K4
JJreDrJVDzQR0KURG77b3BHw6+zX5khcZUr54vTvidp9anpPitTQo0pKzxYe
5K3MHdFfBNRlgYzOFrvyFluoCa1UWcn2SMsGDfGg6f3pL3/yKBoc2cWEksCV
/oH1Wj4jf0bX0lMm3ko1r7yIsUJPkNqu0goFGIwz/5yqCFlBzU/v/NvbWx/P
hD9NhhILUslt1W6QYhDlx1/3gudnrWDlcOnNx8n4cv9w9HYEv5dfXlYqFk0A
6e4PKzso38F/WMKDHyTjwX/pQZLy4I8c+aj8EX8/a02Gd8OT3fDXt29/6fzS
Wr+8a3WOduAmcZ33Ue9Zur476J1d/5atVP4ISgsoO93s/TSJnpGzGAb+w/Ih
/I9fsEGBFzv8GU08nnUOgtery9HH7p4f+3e710uvlm+mL9cv/FljspW8v71c
7h1eHl1effjoV/5I1CucvVwKf96JTqKXw+7zrdtXy5OV3t5RejQ6TH+dHa0f
Xb+7Pjs83j2KbiPY/eTow2TjaJQthS28t/WXyusLevp41ov46TcfLhpvzq+j
13svV48+xNGb88O7y4vDX1srg/3u6NfLi8bmyrsXw58vLganv37sxb+s/PqX
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
Ly+hVa/8fyfp8rZzAgEA

-->

</rfc>
