<?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.29 (Ruby 3.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-moq-c4m-00" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.2 -->
  <front>
    <title abbrev="CAT-4-MOQT">Authentication scheme for MOQT using Common Access Tokens</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-moq-c4m-00"/>
    <author initials="W." surname="Law" fullname="Will Law">
      <organization>Akamai</organization>
      <address>
        <email>wilaw@akamai.com</email>
      </address>
    </author>
    <author initials="C." surname="Lemmons" fullname="Chris Lemmons">
      <organization>Comcast</organization>
      <address>
        <email>Chris_Lemmons@comcast.com</email>
      </address>
    </author>
    <author initials="G." surname="Simon" fullname="Gwendal Simon">
      <organization>Synamedia</organization>
      <address>
        <email>gsimon@synamedia.com</email>
      </address>
    </author>
    <author initials="S." surname="Nandakumar" fullname="Suhas Nandakumar">
      <organization>Cisco</organization>
      <address>
        <email>snandaku@cisco.com</email>
      </address>
    </author>
    <date year="2025" month="September" day="19"/>
    <area/>
    <workgroup>Media Over QUIC</workgroup>
    <keyword>media over quic</keyword>
    <keyword>authentication</keyword>
    <keyword>common access token</keyword>
    <keyword>CAT</keyword>
    <abstract>
      <?line 74?>

<t>A token-based authentication scheme for use with Media Over QUIC Transport.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://moq-wg.github.io/CAT-4-MOQT/"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-moq-c4m/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Media Over QUIC  mailing list (<eref target="mailto:moq@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/moq/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/moq/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/moq-wg/CAT-4-MOQT"/>.</t>
    </note>
  </front>
  <middle>
    <?line 79?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>This draft introduces a token-based authentication scheme for use with MOQT <xref target="MoQTransport"/>.
The scheme protects access to the relay during session establishment and also contrains the
actions which the client may take once connected.</t>
      <t>This draft defines version 1 of this specification.</t>
      <section anchor="overview-of-the-authentication-workflow">
        <name>Overview of the authentication workflow</name>
        <ul spacing="normal">
          <li>
            <t>An end-user logs-in to a distribution service. The service authenticates the user (via
username/password, OAuth, 2FA or another method). The methods involved in this authentication step
lie outside the scope of this draft.</t>
          </li>
          <li>
            <t>Based upon the identity and permissions granted to that end-user, the service generates a token. A
token is a data structure that has been serialized into a byte array. The token encodes information
such as the user's ID, constraints on how and when they can access the MOQT distribution network and
contraints on the actions they can take once connected. The token may be signed to make it
tamper-resistent.</t>
          </li>
          <li>
            <t>The token is given in the clear to the end-user, along with a URL to connect to the edge relay of a MOQT
distribution network. The edge relay is part of a trusted MOQT distribution network. It has previously
shared secrets with the distribution service, so that this relay is entitled to decrypt related tokens and
to validate signatures.</t>
          </li>
          <li>
            <t>The end-user client application provides the token to the MOQT distribution relay when it connects. This
connection may be established over WebTransport or raw QUIC.</t>
          </li>
          <li>
            <t>The relay decrypts the token upon receipt and validates the signature. Based upon claims conveyed in
the token, the relay accepts or rejects the connection.</t>
          </li>
          <li>
            <t>If the relay accepts the connection, then the client will take a series of MOQT actions: ANNOUNCE,
SUBSCRIBE_ANNOUNCES, SUBSCRIBE or FETCH. For each of these, it will supply the token it received using
the AUTHENTICATION parameter.</t>
          </li>
          <li>
            <t>As an alternative to this workflow, the distribution service may vend multiple tokens to the client. The
client may use one of those tokens to establish the initial conneciton and others to authenticate its actions.</t>
          </li>
        </ul>
        <sourcecode type="ascii"><![CDATA[
     End User              Distribution Service         MOQT Relay
        |                         |                         |
        |                         |  0. Share secrets       |
        |                         |<----------------------->|
        |                         |   (offline/pre-setup)   |
        |                         |                         |
        |  1. Login/Authenticate  |                         |
        |<----------------------->|                         |
        |                         |                         |
        |  2. Generate C4M Token  |                         |
        |       + Relay URL       |                         |
        |<------------------------|                         |
        |                         |                         |
        |  3. Connect to Relay with Token                   |
        |-------------------------------------------------->|
        |                         |                         |
        |                         |  4. Validate Token      |
        |                         |<----------------------->|
        |                         | (previously shared      |
        |                         |     secrets)            |
        |                         |                         |
        |  5. Accept/Reject Connection                      |
        |<--------------------------------------------------|
        |                         |                         |
        |  6. MOQT Actions with Token Authentication        |
        |<------------------------------------------------->|
        |     (ANNOUNCE, SUBSCRIBE, PUBLISH, FETCH)         |
        |                         |                         |
        |                         |  7. Revalidate Token    |
        |                         |<----------------------->|
        |                         |   (if moqt-reval set,   |
        |                         |    repeats at interval  |
        |                         |    e.g., every 5 min)   |
]]></sourcecode>
      </section>
    </section>
    <section anchor="token-format">
      <name>Token format</name>
      <t>This draft uses a single token format, namely the Common Access Token (CAT) <xref target="CAT"/>. The token is supplied
as a byte array. When it must be cast to a string for inclusion in a URL, it is Base64 encoded <xref target="BASE64"/>.</t>
      <t>To provide control over the MOQT actions, this draft defines a new CBOR Web Token (CWT) Claim called "moqt".
Use of the moqt claim is optional for clients. Support for processing the moqt claim is mandatory for relays.</t>
      <t>The default for all actions is "Blocked" and this does not need to be communicated in the token.
As soon as a token is provided, all actions are explicitly blocked unless explicitly enabled.</t>
      <section anchor="moqt-claim">
        <name>moqt claim</name>
        <t>The "moqt" claim is defined by the following CDDL:</t>
        <artwork><![CDATA[
$$Claims-Set-Claims //= (moqt-label => moqt-value)
moqt-label = TBD_MOQT
moqt-value = [ + moqt-scope ]
moqt-scope = [ moqt-actions, moqt-ns-match, moqt-track-match ]
moqt-actions = [ + moqt-action ]
moqt-action = int
moqt-ns-match = bin-match
moqt-track-match = bin-match

bin-match = {
  ? exact-match ^ => bstr,
  ? prefix-match ^ => bstr,
  ? suffix-match ^ => bstr,
  ? contains-match ^ => bstr,
}

/ match labels defined in CTA-5007-B 4.6.1 /
exact-match = 0
prefix-match = 1
suffix-match = 2
contains-match = 3
]]></artwork>
        <t>The "moqt" claim bounds the scope of MOQT actions for which the token can provide
access. It is an array of action scopes. Each scope is an array with three
elements: an array of integers that identifies the actions, a match object for
the namespace, and a match object for the track name.</t>
        <t>The actions are integers defined as follows:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Action</th>
              <th align="left">Key</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">CLIENT_SETUP</td>
              <td align="left">0</td>
              <td align="left">
                <xref target="MoQTransport"/> Section 8.3</td>
            </tr>
            <tr>
              <td align="left">SERVER_SETUP</td>
              <td align="left">1</td>
              <td align="left">
                <xref target="MoQTransport"/> Section 8.3</td>
            </tr>
            <tr>
              <td align="left">ANNOUNCE</td>
              <td align="left">2</td>
              <td align="left">
                <xref target="MoQTransport"/> Section 8.23</td>
            </tr>
            <tr>
              <td align="left">SUBSCRIBE_NAMESPACE</td>
              <td align="left">3</td>
              <td align="left">
                <xref target="MoQTransport"/> Section 8.28</td>
            </tr>
            <tr>
              <td align="left">SUBSCRIBE</td>
              <td align="left">4</td>
              <td align="left">
                <xref target="MoQTransport"/> Section 8.7</td>
            </tr>
            <tr>
              <td align="left">SUBSCRIBE_UPDATE</td>
              <td align="left">5</td>
              <td align="left">
                <xref target="MoQTransport"/> Section 8.10</td>
            </tr>
            <tr>
              <td align="left">PUBLISH</td>
              <td align="left">6</td>
              <td align="left">
                <xref target="MoQTransport"/> Section 8.13</td>
            </tr>
            <tr>
              <td align="left">FETCH</td>
              <td align="left">7</td>
              <td align="left">
                <xref target="MoQTransport"/> Section 8.16</td>
            </tr>
            <tr>
              <td align="left">TRACK_STATUS</td>
              <td align="left">8</td>
              <td align="left">
                <xref target="MoQTransport"/> Section 8.20</td>
            </tr>
          </tbody>
        </table>
        <t>The scope of the moqt claim is limited to the actions provided in the array.
Any action not present in the array is not authorized by moqt claim.</t>
        <t>The match object is defined to be a binary form of the match object defined in
<xref target="CAT"/> Section 4.6.1. The regex and hash match types are not defined for use
with binary values in this document.</t>
        <t>The first match operation is performed against the namespace and the second
against the track name (as defined in Section 2.4.1 of
{draft-ietf-moq-transport}). Since the match is not being performed against a
URI, no normalization is performed and the matches are performed against the
entire string. An empty match object is a legal construct that matches all
names.</t>
        <section anchor="text-examples-of-permissions-to-help-with-cddl-construction">
          <name>Text examples of permissions to help with CDDL construction</name>
          <t>Example: Allow with an exact match "example.com/bob"</t>
          <artwork><![CDATA[
{
    /moqt/ TBD_MOQT: [[
        [ /ANNOUNCE/ 2, /SUBSCRIBE_NAMESPACE/ 3, /PUBLISH/ 6, /FETCH/ 7 ],
        { /exact/ 0: 'example.com'},
        { /exact/ 0: '/bob'}
    ]]
}
]]></artwork>
          <artwork><![CDATA[
Permits
* 'example.com', '/bob'

Prohibits
* 'example.com', ''
* 'example.com', '/bob/123'
* 'example.com', '/alice'
* 'example.com', '/bob/logs'
* 'alternate/example.com', /bob
* '12345', ''
* 'example', '.com/bob'
]]></artwork>
          <t>Example: Allow with a prefix match "example.com/bob"</t>
          <artwork><![CDATA[
{
    /moqt/ TBD_MOQT: [[
        [ /ANNOUNCE/ 2, /SUBSCRIBE_NAMESPACE/ 3, /PUBLISH/ 6, /FETCH/ 7 ],
        { /exact/ 0: 'example.com'},
        { /prefix/ 1: '/bob'}
    ]]
}
]]></artwork>
          <artwork><![CDATA[
Permits
* 'example.com', '/bob'
* 'example.com', '/bob/123'
* 'example.com', '/bob/logs'

Prohibits
* 'example.com', ''
* 'example.com', '/alice'
* 'alternate/example.com', '/bob'
* '12345', ''
* 'example', '.com/bob'
]]></artwork>
        </section>
        <section anchor="multiple-actions">
          <name>Multiple actions</name>
          <t>Multiple actions may be communicated within the same token, with different
permissions. This can be facilitated by the logical claims defined in
<xref target="Composite"/> or simply by defining multiple limits,
depending on the required restrictions. In both cases, the order in which
limits are declared and evaluated is unimportant. The evaluation stops after
the first acceptable result is discovered.</t>
          <section anchor="example-of-evaluating-multiple-actions-in-the-same-token">
            <name>Example of evaluating multiple actions in the same token:</name>
            <artwork><![CDATA[
{
    /moqt/ TBD_MOQT: [
        [/PUBLISH/ 6, { /exact/ 0: 'example.com'}, { /prefix/ 1: 'bob'}],
        [/PUBLISH/ 6, { /exact/ 0: 'example.com'}, { /exact/ 0: 'logs/12345/bob'}]
    ],
    /exp/ 4: 1750000000
}
]]></artwork>
            <ul spacing="normal">
              <li>
                <t>(1) PUBLISH (Allow with a prefix match) example.com/bob</t>
              </li>
              <li>
                <t>(2) PUBLISH (Allow with an exact match) example.com/logs/12345/bob</t>
              </li>
            </ul>
            <t>Evaluating "example.com/bob/123" would succeed on test 1 and test 2 would never be evaluated.
Evaluating "example.com/logs/12345/bob" would fail on test 1 but then succeed on test 2.
Evaluating "example.com" would fail on test 1 and on test 2.</t>
            <t>In addition, the entire token expires at 2025-05-02T21:57:24+00:00.</t>
          </section>
          <section anchor="example-of-evaluating-multiple-actions-with-related-claims">
            <name>Example of evaluating multiple actions with related claims:</name>
            <t>If there are other claims that depend on which MOQT limit applies, a logical claim is required:</t>
            <artwork><![CDATA[
{
    /or/ TBD_OR: [
        {
            /moqt/ TBD_MOQT: [[/PUBLISH/ 6, { /exact/ 0: 'example.com'}, { /prefix/ 1: 'bob'}]],
            /exp/ 4: 1750000000
        },
        {
            /moqt/ TBD_MOQT: [[/PUBLISH/ 6, { /exact/ 0: 'example.com'}, { /exact/ 0: 'logs/12345/bob'}]],
            /exp/ 4: 1750000600
        }
    ]
}
]]></artwork>
            <t>This provides access to the same tracks as the previous example, but in this
case, the token is valid for publishing logs up to 10 minutes after the time at
which the publishing of the bob track expires.</t>
            <t>DISCUSS: Because tokens are designed for instantanous evaluation, they
naturally only evaluate to an "acceptable" or an "unacceptable". It's somewhat
tricky to turn an evaluation into a complete bound on any particular value. The
CAT has a number of claims about the context of the request that can change
while the stream is open. The most obvious of these is the expiration time. The
"catnip" (Network IP) and geographic claims can also change mid-stream if the
connection is migrated or the client moves. Do we need to do something special
to require periodic re-evalution?</t>
          </section>
        </section>
      </section>
      <section anchor="moqt-reval-claim">
        <name>moqt-reval claim</name>
        <t>The "moqt-reval" claim is defined by the following CDDL:</t>
        <artwork><![CDATA[
$$Claims-Set-Claims //= (moqt-reval-label => moqt-reval-value)
moqt-reval-label = TBD_MOQT_REVAL
moqt-reval-value = number
]]></artwork>
        <t>The "moqt-reval" claim indicates that the token must be
revalidated for ongoing streams. If the token is no longer acceptable, the
actions authorized by it <bcp14>MUST</bcp14> not be permitted to continue.</t>
        <t>The "moqt-reval-value" is a revalidation interval, expressed in seconds.
It provides an upper bound on how long a
token may be considered acceptable for an ongoing stream. A revalidator <bcp14>MAY</bcp14>
revalidate sooner.</t>
        <t>If the revalidation interval is smaller than the recipient is prepared
or able to revalidate, the recipient <bcp14>MUST</bcp14> reject the token. If a recipient is
unable to revalidate tokens, it <bcp14>MUST</bcp14> reject all tokens with a "moqt-reval"
claim.</t>
        <t>A token can be revalidated by simply validating it again, just as if it were
new. However, since some claims, signatures, MACs, and other attributes that
could contribute to unacceptability may be incapable of changing acceptability
in the duration, a revalidator may optimize by skipping some of the checks as
long as the outcome of the validation is the same. Revalidators <bcp14>SHOULD</bcp14> skip
reverifying MACs and signatures when the list of acceptable issuer keys is
unchanged.</t>
        <t>When the value of this claim is zero, the token <bcp14>MUST NOT</bcp14> be revalidated. This
is the default behaviour when the claim is not present.</t>
        <t>This claim <bcp14>MUST NOT</bcp14> be used outside of a base claimset. If used within a composition
claims, the token is not well-formed.</t>
        <t>The claim key for this claim is TBD_MOQT_REVAL and the claim value is a number.
Recipients <bcp14>MUST</bcp14> support this claim. This claim is <bcp14>OPTIONAL</bcp14> for issuers.</t>
      </section>
    </section>
    <section anchor="dpop-integration-with-cat-for-moqt">
      <name>DPoP Integration with CAT for MOQT</name>
      <t>This section defines the use of CAT's Demonstrating Proof of Possession (DPoP)
claims <xref target="DPoP"/> to enhance security in MOQT environments. This approach
leverages the CAT token's "cnf" (confirmation) claim with JWK Thumbprint
binding and the "catdpop" (CAT DPoP Settings) claim to provide
proof-of-possession capabilities that prevent token theft and replay
attacks in MOQT systems.</t>
      <section anchor="cat-dpop-claims-for-moqt">
        <name>CAT DPoP Claims for MOQT</name>
        <t>This proposal extends the CAT authentication model by binding tokens to
client cryptographic key pairs. To enable sender-constrained token usage,
the CAT tokens include DPoP-related claims as defined <xref target="CAT"/> Section 4.8,
ensuring that only the legitimate token holder can use the token for MOQT
operations.</t>
        <section anchor="confirmation-cnf-claim-with-jwk-thumbprint">
          <name>Confirmation (cnf) Claim with JWK Thumbprint</name>
          <t>DPoP binding is accomplished by providing the "cnf" claim with the "jkt"
(JWK Thumbprint) confirmation method.</t>
          <t>Below is an exmaple showing jkt token binding.</t>
          <artwork><![CDATA[
{
  / cnf /
  8: {
    / jkt /
    3: <32-byte JWK SHA-256 Thumbprint>
  },
  / moqt /
  TBD_MOQT: [
    [
      [2, 3, 6, 7], / ANNOUNCE, SUBSCRIBE_NAMESPACE, PUBLISH, FETCH /
      {"exact": "cdn.example.com"},
      {"prefix": "/sports/"}
    ]
  ],
  / catdpop /
  321: {
    0: 300,  / 5-minute window /
    1: 1     / Honor jti for replay protection /
  },
  / exp /
  4: 1750000000
}
]]></artwork>
          <t>Implementation Requirements:</t>
          <ul spacing="normal">
            <li>
              <t>Relay Validation: MOQT relays <bcp14>MUST</bcp14> verify that DPoP proofs are signed with
the private key corresponding to the "jkt" value</t>
            </li>
            <li>
              <t>Proof Binding: Relays <bcp14>MUST</bcp14> reject requests where DPoP proof validation or
key binding fails</t>
            </li>
            <li>
              <t>Processing Semantics: Relays <bcp14>MUST</bcp14> process DPoP proofs as Protected Resource
Access requests per <xref target="DPoP"/> Section 7</t>
            </li>
          </ul>
        </section>
        <section anchor="dpop-extension-with-application-agnostic-proof-framework">
          <name>DPoP Extension with Application-Agnostic Proof Framework</name>
          <t>This section defines the use of DPoP with an application-agnostic proof
framework as specified in <xref target="DPOP-PROOF"/>, which
extends the traditional HTTP-centric DPoP model to support arbitrary
protocols including MOQT. This approach replaces HTTP-specific claims
with a flexible authorization context structure that can accommodate
protocol-specific command representations.</t>
          <t>The DPoP proof JWT follows the structure defined in Section 4 of
<xref target="DPOP-PROOF"/> with the following required claims:</t>
          <t>JWT Header:</t>
          <ul spacing="normal">
            <li>
              <t>"typ": "dpop-proof+jwt"</t>
            </li>
            <li>
              <t>"alg": Asymmetric signature algorithm identifier</t>
            </li>
            <li>
              <t>"jwk": Public key for verification</t>
            </li>
          </ul>
          <t>JWT Payload:</t>
          <ul spacing="normal">
            <li>
              <t>"jti": Unique identifier for the JWT</t>
            </li>
            <li>
              <t>"iat": Issued-at time</t>
            </li>
            <li>
              <t>"actx": Authorization Context object</t>
            </li>
          </ul>
          <t>For MOQT operations, the Authorization Context ("actx") object contains:</t>
          <ul spacing="normal">
            <li>
              <t>"type": "moqt" (registered identifier for MOQT protocol)</t>
            </li>
            <li>
              <t>"action": MOQT action identifier</t>
            </li>
            <li>
              <t>"tns": Track namespace (required)</t>
            </li>
            <li>
              <t>"tn": Track name (required)</t>
            </li>
            <li>
              <t>"resource": MOQT resource identifier (optional)</t>
            </li>
          </ul>
          <t>When the optional "resource" parameter is included, it <bcp14>MUST</bcp14> be consistent with the
"tns" and "tn" parameters. The resource URI should follow the format
<tt>moqt://&lt;relay-endpoint&gt;?tns=&lt;namespace&gt;&amp;tn=&lt;track&gt;</tt> where the tns and tn query
parameters match the respective "tns" and "tn" fields in the Authorization Context.</t>
          <t>Example DPoP proof for MOQT ANNOUNCE operation:</t>
          <artwork><![CDATA[
{
  "typ": "dpop-proof+jwt",
  "alg": "ES256",
  "jwk": { ... }
}
.
{
  "jti": "unique-request-id",
  "iat": 1705123456,
  "actx": {
    "type": "moqt",
    "action": "ANNOUNCE",
    "tns": "sports",
    "tn": "live-feed"
  }
}
]]></artwork>
          <t>MOQT action mapping for Authorization Context:</t>
          <table>
            <thead>
              <tr>
                <th align="left">MOQT Action</th>
                <th align="left">actx.action</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">CLIENT_SETUP</td>
                <td align="left">SETUP</td>
              </tr>
              <tr>
                <td align="left">SERVER_SETUP</td>
                <td align="left">SETUP</td>
              </tr>
              <tr>
                <td align="left">ANNOUNCE</td>
                <td align="left">ANNOUNCE</td>
              </tr>
              <tr>
                <td align="left">SUBSCRIBE_NAMESPACE</td>
                <td align="left">SUB_NS</td>
              </tr>
              <tr>
                <td align="left">SUBSCRIBE</td>
                <td align="left">SUBSCRIBE</td>
              </tr>
              <tr>
                <td align="left">PUBLISH</td>
                <td align="left">PUBLISH</td>
              </tr>
              <tr>
                <td align="left">FETCH</td>
                <td align="left">FETCH</td>
              </tr>
            </tbody>
          </table>
          <t>Relays supporting this application-agnostic DPoP framework <bcp14>MUST</bcp14>:</t>
          <ul spacing="normal">
            <li>
              <t>Validate DPoP proofs according to <xref target="DPOP-PROOF"/></t>
            </li>
            <li>
              <t>Verify that the "actx.type" is "moqt" for MOQT operations</t>
            </li>
            <li>
              <t>Validate that the "actx.action" matches the requested MOQT action</t>
            </li>
            <li>
              <t>Verify that the "actx.tns" corresponds to the target track namespace</t>
            </li>
            <li>
              <t>Verify that the "actx.tn" corresponds to the target track name</t>
            </li>
            <li>
              <t>If present, verify the "actx.resource" is consistent with "tns" and "tn"</t>
            </li>
            <li>
              <t>Reject requests where Authorization Context validation fails</t>
            </li>
          </ul>
        </section>
        <section anchor="moqt-resource-uri-construction">
          <name>MOQT Resource URI Construction</name>
          <t>The Authorization Context "resource" field should specify track namespace (tns) and track name (tn) parameters for MOQT resources:</t>
          <ul spacing="normal">
            <li>
              <t>Connection setup: <tt>moqt://&lt;relay-endpoint&gt;</tt></t>
            </li>
            <li>
              <t>Namespace operations: <tt>moqt://&lt;relay-endpoint&gt;?tns=&lt;namespace&gt;</tt></t>
            </li>
            <li>
              <t>Track operations: <tt>moqt://&lt;relay-endpoint&gt;?tns=&lt;namespace&gt;&amp;tn=&lt;track&gt;</tt></t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="dpop-proof-process-and-token-binding-flow">
        <name>DPoP Proof Process and Token Binding Flow</name>
        <t>The following process illustrates how DPoP proof provision results in CAT
token binding and subsequent MOQT relay validation:</t>
        <section anchor="phase-1-token-acquisition-with-dpop-binding">
          <name>Phase 1: Token Acquisition with DPoP Binding</name>
          <artwork><![CDATA[
┌──────────────┐                ┌─────────────────────┐                ┌──────┐
│MOQT Client   │                │Authorization Server │                │MOQT  │
│              │                │                     │                │Relay │
└──────┬───────┘                └──────────┬──────────┘                └──────┘
       │                                   │                                │
       │ (1) Generate Key Pair             │                                │
       │     EC P-256/RSA                  │                                │
       │     private_key, public_key       │                                │
       │                                   │                                │
       │ (2) Authentication Request        │                                │
       │     + User Credentials            │                                │
       │     + Public Key (JWK format)     │                                │
       ├──────────────────────────────────►│                                │
       │                                   │                                │
       │                                   │ (3) User Authentication        │
       │                                   │     & Authorization            │
       │                                   │                                │
       │                                   │ (4) Generate CAT Token:        │
       │                                   │     • "cnf" claim with         │
       │                                   │       "jkt": SHA256(public_key)│
       │                                   │     • "catdpop" processing     │
       │                                   │       settings                 │
       │                                   │     • "moqt" action scope      │
       │                                   │     • Sign with shared secret  │
       │                                   │                                │
       │ (5) CAT Token Response            │                                │
       │     + Bound CAT Token             │                                │
       │     + Relay Endpoint URL          │                                │
       |◄──────────────────────────────────┤                                │
       │                                   │                                │
]]></artwork>
          <t>Steps 1-5 Detail:</t>
          <ol spacing="normal" type="1"><li>
              <t>Client Key Generation: The MOQT client generates an asymmetric key pair
(typically EC P-256) for DPoP operations</t>
            </li>
            <li>
              <t>Authentication with Public Key: Client authenticates with the authorization
server, providing user credentials and the public key</t>
            </li>
            <li>
              <t>User Authentication: Authorization server validates user identity and
permissions</t>
            </li>
            <li>
              <t>CAT Token Generation: Server creates a CAT token containing:
              </t>
              <ul spacing="normal">
                <li>
                  <t>"cnf" claim: JWK Thumbprint ("jkt") of the client's public key
(32-byte SHA-256 hash)</t>
                </li>
                <li>
                  <t>"catdpop" claim: DPoP processing settings (window, jti handling,
critical settings)</t>
                </li>
                <li>
                  <t>"moqt" claim: Authorized MOQT actions and scope restrictions</t>
                </li>
              </ul>
            </li>
            <li>
              <t>Token Delivery: Server provides the bound CAT token and relay endpoint
information to the client</t>
            </li>
          </ol>
        </section>
        <section anchor="phase-2-moqt-operations-with-dpop-proof-validation">
          <name>Phase 2: MOQT Operations with DPoP Proof Validation</name>
          <artwork><![CDATA[
┌──────────────┐                ┌─────────────────────┐                ┌───────┐
│MOQT Client   │                │Authorization Server │                │MOQT   │
│              │                │                     │                │Relay  │
└──────┬───────┘                └──────────┬──────────┘                └──────┬┘
       │                                   │                                  │
       │                                   │                                  │
       │ (6) For each MOQT action:         │                                  │
       │     Create fresh DPoP proof JWT   │                                  │
       │     • Header: typ="dpop-proof+jwt"│                                  │
       │     •         alg, jwk            │                                  │
       │     • Claims: jti, iat, actx      │                                  │
       │     • Sign with private_key       │                                  │
       │                                   │                                  │
       │ (7) MOQT Request                  │                                  │
       │     + CAT Token                   │                                  │
       │     + Fresh DPoP Proof            │                                  │
       │     (CLIENT_SETUP, ANNOUNCE,      │                                  │
       │      SUBSCRIBE, PUBLISH, FETCH)   │                                  │
       ├─────────────────────────────────────────────────────────────────────►│
       │                                   │                                  │
       │                                   │                               (8)│
       │                                   │                  CAT Validation: │
       │                                   │                 • Verify token   │
       │                                   │                   signature      │
       │                                   │                 • Validate claims│
       │                                   │                   including exp, |
       |                                   |                   scope          │
       │                                   │                                  │
       │                                   │                               (9)│
       │                                   │                 DPoP Validation: │
       │                                   │                  • Extract "jkt" │
       │                                   │                    from token    │
       │                                   │                  • Verify DPoP   │
       │                                   │                    JWT signature │
       │                                   │                  • Validate key  │
       │                                   │                    binding       │
       │                                   │                  • Check         │
       │                                   │                    freshness     │
       │                                   │                                  │
       │                                   │                              (10)│
       │                                   │              Action Authorization│
       │                                   │                  • Match action  │
       │                                   │                    to token scope│
       │                                   │                  • Check ns/track│
       │                                   │                    permissions   │
       │                                   │                                  │
       │ (11) Response                     │                                  │
       │      Success/Error                │                                  │
       ◄─────────────────────────────────────────────────────────────────────┤
       │                                   │                                  │
]]></artwork>
          <t>Steps 6-11 Detail:</t>
          <ol spacing="normal" type="1"><li>
              <t>DPoP Proof Creation: For each MOQT action, the client creates a fresh
  DPoP proof JWT with:
              </t>
              <ul spacing="normal">
                <li>
                  <t>Header: <tt>typ: "dpop-proof+jwt"</tt>, <tt>alg</tt>, <tt>jwk</tt> (public key)</t>
                </li>
                <li>
                  <t>Claims: <tt>jti</tt> (unique ID), <tt>iat</tt> (timestamp), <tt>actx</tt>
        (Authorization Context with type, action, tns, tn)</t>
                </li>
              </ul>
            </li>
            <li>
              <t>MOQT Request: Client sends MOQT action with both CAT token and fresh DPoP
  proof</t>
            </li>
            <li>
              <t>CAT Token Validation: Relay validates:
              </t>
              <ul spacing="normal">
                <li>
                  <t>Token signature using shared secret with authorization server</t>
                </li>
                <li>
                  <t>Token expiration time</t>
                </li>
                <li>
                  <t>"moqt" claim scope for requested action</t>
                </li>
              </ul>
            </li>
            <li>
              <t>DPoP Proof Validation: Relay performs:  </t>
              <ul spacing="normal">
                <li>
                  <t>Extract "jkt" (JWK Thumbprint) from CAT token's "cnf" claim</t>
                </li>
                <li>
                  <t>Verify DPoP JWT signature using embedded public key</t>
                </li>
                <li>
                  <t>Confirm that SHA-256 hash of DPoP public key matches "jkt" value</t>
                </li>
                <li>
                  <t>Check proof freshness within "catdpop" window settings</t>
                </li>
                <li>
                  <t>Process replay protection based on "jti" settings</t>
                </li>
                <li>
                  <t>Validate Authorization Context ("actx") according to <xref target="DPOP-PROOF"/></t>
                </li>
                <li>
                  <t>Verify "actx.type" is "moqt"</t>
                </li>
                <li>
                  <t>Validate "actx.action" matches the requested MOQT action</t>
                </li>
                <li>
                  <t>Verify "actx.tns" and "actx.tn" correspond to target resources</t>
                </li>
              </ul>
            </li>
            <li>
              <t>Action Authorization: Relay validates the specific MOQT action against
token scope and namespace/track permissions</t>
            </li>
            <li>
              <t>Response: Relay responds with success or appropriate error information</t>
            </li>
          </ol>
        </section>
      </section>
    </section>
    <section anchor="adding-a-token-to-a-url">
      <name>Adding a token to a URL</name>
      <t>Any time an application wishes to add a CAT token to a URL or path element, the token <bcp14>SHOULD</bcp14> first
be Base64 encoded <xref target="BASE64"/>. The syntax and method of modifying the URL is left to the application
to define and is not constrained by this specification.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>TODO Add security considerations for DPoP Claims</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>IANA will register the following claims in the "CBOR Web Token (CWT) Claims" registry:</t>
      <table>
        <thead>
          <tr>
            <th align="left"> </th>
            <th align="left">moqt</th>
            <th align="left">moqt-reval</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">Claim Name</td>
            <td align="left">moqt</td>
            <td align="left">moqt-reval</td>
          </tr>
          <tr>
            <td align="left">Claim Description</td>
            <td align="left">MOQT Action</td>
            <td align="left">MOQT revalidation</td>
          </tr>
          <tr>
            <td align="left">JWT Claim Name</td>
            <td align="left">N/A</td>
            <td align="left">N/A</td>
          </tr>
          <tr>
            <td align="left">Claim Key</td>
            <td align="left">TBD_MOQT (1+2)</td>
            <td align="left">TBD_MOQT (1+2)</td>
          </tr>
          <tr>
            <td align="left">Claim Value Type</td>
            <td align="left">array</td>
            <td align="left">number</td>
          </tr>
          <tr>
            <td align="left">Change Controller</td>
            <td align="left">IESG</td>
            <td align="left">IESG</td>
          </tr>
          <tr>
            <td align="left">Specification Document</td>
            <td align="left">RFCthis</td>
            <td align="left">RFCthis</td>
          </tr>
        </tbody>
      </table>
      <t>[RFC Editor: Please replace RFCthis with the published RFC number for this
document.]</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <reference anchor="MoQTransport">
        <front>
          <title>Media over QUIC Transport</title>
          <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar">
            <organization>Cisco</organization>
          </author>
          <author fullname="Victor Vasiliev" initials="V." surname="Vasiliev">
            <organization>Google</organization>
          </author>
          <author fullname="Ian Swett" initials="I." surname="Swett">
            <organization>Google</organization>
          </author>
          <author fullname="Alan Frindell" initials="A." surname="Frindell">
            <organization>Meta</organization>
          </author>
          <date day="2" month="September" year="2025"/>
          <abstract>
            <t>   This document defines the core behavior for Media over QUIC Transport
   (MOQT), a media transport protocol designed to operate over QUIC and
   WebTransport, which have similar functionality.  MOQT allows a
   producer of media to publish data and have it consumed via
   subscription by a multiplicity of endpoints.  It supports
   intermediate content distribution networks and is designed for high
   scale and low latency distribution.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-moq-transport-14"/>
      </reference>
      <reference anchor="Composite">
        <front>
          <title>Composite Token Claims</title>
          <author fullname="Chris Lemmons" initials="C." surname="Lemmons">
            <organization>Comcast</organization>
          </author>
          <date day="23" month="July" year="2025"/>
          <abstract>
            <t>   Composition claims are CBOR Web Token claims that define logical
   relationships between sets of claims.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-lemmons-cose-composite-claims-01"/>
      </reference>
      <reference anchor="BASE64">
        <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="CAT" target="https://shop.cta.tech/products/cta-5007">
        <front>
          <title>CTA 5007-B Common Access Token</title>
          <author>
            <organization/>
          </author>
          <date year="2025" month="April"/>
        </front>
      </reference>
      <reference anchor="DPoP">
        <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="DPOP-PROOF" target="https://www.ietf.org/archive/id/draft-nandakumar-oauth-dpop-proof-00.txt">
        <front>
          <title>Application-Agnostic Demonstrating Proof-of-Possession</title>
          <author initials="S." surname="Nandakumar" fullname="S. Nandakumar">
            <organization/>
          </author>
          <date year="2024" month="December"/>
        </front>
      </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>
    <?line 729?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The IETF moq workgroup</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
