<?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-00" 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-00"/>
    <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="11"/>
    <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="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>
        <table>
          <thead>
            <tr>
              <th align="left">Property</th>
              <th align="left">EdDSA / Ed25519</th>
              <th align="left">EdDSA / Ed448</th>
              <th align="left">ES256 (P-256)</th>
              <th align="left">RS256 (RSA-2048)</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Security level</td>
              <td align="left">128-bit</td>
              <td align="left">224-bit</td>
              <td align="left">128-bit</td>
              <td align="left">112-bit</td>
            </tr>
            <tr>
              <td align="left">Signature size</td>
              <td align="left">64 bytes</td>
              <td align="left">114 bytes</td>
              <td align="left">64 bytes</td>
              <td align="left">256 bytes</td>
            </tr>
            <tr>
              <td align="left">Public key size</td>
              <td align="left">32 bytes</td>
              <td align="left">57 bytes</td>
              <td align="left">64 bytes</td>
              <td align="left">~256 bytes</td>
            </tr>
            <tr>
              <td align="left">Signing speed</td>
              <td align="left">Very fast (deterministic)</td>
              <td align="left">Fast (deterministic)</td>
              <td align="left">Moderate</td>
              <td align="left">Slow</td>
            </tr>
            <tr>
              <td align="left">Side-channel resistance</td>
              <td align="left">Strong (constant-time)</td>
              <td align="left">Strong (constant-time)</td>
              <td align="left">Moderate</td>
              <td align="left">Weak</td>
            </tr>
          </tbody>
        </table>
      </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 1169?>

<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>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
