| Internet-Draft | Privacy Pass MoQ Auth | March 2026 |
| Nandakumar, et al. | Expires 3 September 2026 | [Page] |
This document specifies the use of Privacy Pass architecture and issuance protocols for authorization in Media over QUIC (MoQ) transport protocol. It defines how Privacy Pass tokens can be integrated with MoQ's authorization framework to provide privacy-preserving authentication for subscriptions, fetches, publications, and relay operations while supporting fine-grained access control through prefix-based track namespace and track name matching rules.¶
This note is to be removed before publishing as an RFC.¶
The latest revision of this draft can be found at https://moq-wg.github.io/privacy-pass/draft-ietf-moq-privacy-pass-auth.html. Status information for this document may be found at https://datatracker.ietf.org/doc/draft-ietf-moq-privacy-pass-auth/.¶
Discussion of this document takes place on the Media Over QUIC Working Group mailing list (mailto:moq@ietf.org), which is archived at https://mailarchive.ietf.org/arch/browse/moq/. Subscribe at https://www.ietf.org/mailman/listinfo/moq/. Working Group information can be found at https://datatracker.ietf.org/wg/moq/.¶
Source for this draft and an issue tracker can be found at https://github.com/moq-wg/privacy-pass.¶
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.¶
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.¶
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."¶
This Internet-Draft will expire on 3 September 2026.¶
Copyright (c) 2026 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Revised BSD License.¶
Media over QUIC (MoQ) [MoQ-TRANSPORT] provides a transport protocol for live and on-demand media delivery, real-time communication, and interactive content distribution over QUIC connections. The protocol supports a wide range of applications including video streaming, video conferencing, gaming, interactive broadcasts, and other latency-sensitive use cases. MoQ includes mechanisms for authorization through tokens that can be used to control access to media streams, interactive sessions, and relay operations.¶
Traditional authorization mechanisms often lack the privacy protection needed for modern media distribution scenarios, where users' viewing patterns and content preferences should remain private while still enabling fine-grained access control, namespace restrictions, and operational constraints.¶
Privacy Pass [RFC9576] provides a privacy-preserving authorization architecture that enables anonymous authentication through unlinkable tokens. The Privacy Pass architecture consists of four entities: Client, Origin, Issuer, and Attester, which work together to provide token-based authorization without compromising user privacy. The issuance protocols [RFC9578] define how these tokens are created and verified.¶
This document defines how Privacy Pass tokens can be integrated with MoQ's authorization framework to provide comprehensive access control for media streaming, real-time communication, and interactive content services while preserving user privacy through unlinkable authentication tokens.¶
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.¶
Privacy Pass Terminology defined in Section 2 of [RFC9576] is reused here. The Privacy Pass MoQ integration involves the following entities and their interactions:¶
Client: The MoQ client requesting authorization to subscribe to, fetch, or publish media content. The client is responsible for obtaining Privacy Pass tokens through the attestation and issuance process, and presenting these tokens when requesting MoQ operations such as SUBSCRIBE, FETCH, PUBLISH, or PUBLISH_NAMESPACE.¶
MoQ Relay: The MoQ relay server that forwards media content and verifies that clients are authorized. The relay validates Privacy Pass tokens presented by clients, enforces access policies, and forwards authorized requests to other relays. Relays maintain configuration for trusted issuers and validate token signatures and metadata.¶
Privacy Pass Issuer: The entity that issues Privacy Pass tokens to clients after successful attestation. The issuer operates the token issuance protocol, manages cryptographic keys. The issuer creates tokens with appropriate MoQ-specific metadata.¶
Privacy Pass Attester: The entity that attests to properties of clients for the purposes of token issuance. The attester verifies client credentials, subscription status, or other eligibility criteria. Common attestation methods include username/password, OAuth, device certificates, or other authentication mechanisms.¶
In the below deployment, the MoQ relay and Privacy Pass issuer are operated by different entities to enhance privacy through separation of concerns. This corresponds to Section 4.4 of [RFC9576].¶
In certain deployments the MoQ relay and Privacy Pass issuer may be operated by the same entity to simplify key management and policy coordination. This is the Privacy Pass deployment described in Section 4.2 of [RFC9576].¶
The flow described above can be used to bootstrap a shared origin-attester-issuer flow, as described in Section 4.2 of [RFC9576]. The MoQ relay plays all roles (origin, attester, and issuer), allowing it to use privately verifiable token types registered in [PRIVACYPASS-IANA].¶
In this scenario, the MoQ relay origin would accept tokens signed by two issuers:¶
Type 0x0002 token signed by the bootstrap issuer from Section 2.1¶
Type 0x0001, 0x0005, or 0xE5AC tokens signed by its own issuer.¶
This two-phase approach provides several advantages:¶
Bootstrapping: The initial publicly verifiable token (0x0002) establishes
trust without requiring the relay to share private keys with external verifiers.¶
Efficiency: Subsequent privately verifiable tokens allow batched issuance, amortizing cryptographic costs across multiple operations.¶
Privacy: Each token presentation is unlinkable, even when obtained from the same credential.¶
The reverse flow, as described in Section 4 of [PRIVACYPASS-REVERSE-FLOW], allows a client to exchange a publicly verifiable token for privately verifiable tokens (or credentials) issued directly by the MoQ relay.¶
Phase 1: Bootstrap Token Acquisition¶
The client initiates a connection with CLIENT_SETUP without authorization.¶
The MoQ relay responds with UNAUTHORIZED containing a TokenChallenge
specifying a publicly verifiable token type (0x0002).¶
The client performs attestation with an external attester/issuer.¶
The client obtains a publicly verifiable token.¶
Phase 2: Token Exchange via Reverse Flow¶
The client sends CLIENT_SETUP with:¶
The MoQ relay validates the bootstrap token, then processes the credential request using its internal issuer.¶
The MoQ relay responds with SERVER_SETUP containing:¶
A CredentialResponse (or TokenResponse) with the privately verifiable
credential/tokens¶
Phase 3: Normal Operations¶
When using the reverse flow, the GenericBatchTokenRequest in ClientPrivateTokenAuth
contains the credential or token request for the privately verifiable token type:¶
For 0x0001 or 0x0005: TokenRequest as defined in Section 5.1 of [PRIVACYPASS-BATCHED]¶
For 0xE5AC: CredentialRequest as defined in Section 7.1 of [PRIVACYPASS-ARC]¶
Similarly, GenericBatchTokenResponse in ServerPrivateTokenAuth contains:¶
For 0x0001 or 0x0005: TokenResponse as defined in Section 5.2 of [PRIVACYPASS-BATCHED]¶
For 0xE5AC: CredentialResponse as defined in Section 7.2 of [PRIVACYPASS-ARC]¶
This section describes how Privacy Pass tokens are integrated into the MoQ transport protocol to provide privacy-preserving authorization for various media operations.¶
This specification uses the below existing Privacy Pass token types:¶
Publicly verifiable token types¶
0x0002 (Blind RSA (2048-bit)): Defined in Section 6 of [RFC9578]. Uses
blind RSA signatures ([RFC9474]) for deployments requiring distributed validation
across multiple relays.¶
Privately verifiable token types¶
0x0001 (VOPRF(P-384, SHA-384)): Defined in Section 6 of [RFC9578]. Uses VOPRF ([RFC9497]) for
deployments where the origin is the issuer. Issuance can be batched as defined in Section 5 of [PRIVACYPASS-BATCHED].¶
0x0005 (VOPRF(ristretto255, SHA-512)): Defined in Section 8.1 of [PRIVACYPASS-BATCHED]. Uses VOPRF ([RFC9497]) for
deployments where the origin is the issuer. Issuance can be batched as defined in Section 5 of [PRIVACYPASS-BATCHED].¶
0xE5AC (ARC(P-256)): Anonymous Rate Limit Credentials Token using [ARC].
Tokens are presented by clients based on an issued credential and up to a presentation_limit.¶
Privacy Pass tokens used in MoQ MUST follow the structure defined in Section 2.2 of [RFC9577] for the PrivateToken HTTP authentication scheme. The token structure includes:¶
Token Type: 2-byte identifier specifying the issuance protocol used¶
Nonce: 32-byte client-generated random value for uniqueness¶
Challenge Digest: 32-byte SHA-256 hash of the TokenChallenge¶
Token Key ID: Variable-length identifier for the issuer's public key¶
Authenticator: Variable-length cryptographic proof bound to the token¶
MoQ-specific TokenChallenge structures use the default format defined in Section 2.1 of [RFC9577] with MoQ-specific parameters in the origin_info field, reproduced thereafter for convenience:¶
struct {
uint16_t token_type;
opaque issuer_name<1..2^16-1>;
opaque redemption_context<0..32>;
opaque origin_info<0..2^16-1>;
} TokenChallenge;
¶
For MoQ usage, authorization scope information can be encoded by the origin
within origin_info field. This is encoded in the Token at issuance time when
types 0x0001, 0x0002, 0x0005 are used. When clients present a credential
such as with [ARC], the scope may be restricted at presentation time.¶
Origins MAY use redemption_context to scope token use to properties of the client
session. As described in Section 2.1.1.2 of [RFC9577], redemption context can
be set to 32-byte random nonce, to the hash of a specific time window, or even
derived from the client's ASN.¶
MoQ operations are identified by the following action values, aligned with MoQTransport control message types:¶
| Action | Value | Reference |
|---|---|---|
| CLIENT_SETUP | 0 | Section 9.3 of [MoQ-TRANSPORT] |
| SERVER_SETUP | 1 | Section 9.3 of [MoQ-TRANSPORT] |
| PUBLISH_NAMESPACE | 2 | Section 9.20 of [MoQ-TRANSPORT] |
| SUBSCRIBE_NAMESPACE | 3 | Section 9.25 of [MoQ-TRANSPORT] |
| SUBSCRIBE | 4 | Section 9.9 of [MoQ-TRANSPORT] |
| REQUEST_UPDATE | 5 | Section 9.11 of [MoQ-TRANSPORT] |
| PUBLISH | 6 | Section 9.13 of [MoQ-TRANSPORT] |
| FETCH | 7 | Section 9.16 of [MoQ-TRANSPORT] |
| TRACK_STATUS | 8 | Section 9.19 of [MoQ-TRANSPORT] |
The default authorization policy is "blocked" - all actions are denied unless explicitly permitted by a token scope.¶
MoQAction wire representation is as follows¶
enum {
CLIENT_SETUP(0),
SERVER_SETUP(1),
PUBLISH_NAMESPACE(2),
SUBSCRIBE_NAMESPACE(3),
SUBSCRIBE(4),
REQUEST_UPDATE(5),
PUBLISH(6),
FETCH(7),
TRACK_STATUS(8),
(255)
} MoQAction;
¶
Match rules for namespaces and track names support the following types:¶
| Match Type | Value | Description |
|---|---|---|
| MATCH_EXACT | 0 | Value must equal the pattern exactly |
| MATCH_PREFIX | 1 | Value must start with the pattern |
| MATCH_SUFFIX | 2 | Value must end with the pattern |
| MATCH_CONTAINS | 3 | Value must contain the pattern as substring |
Track namespaces in MoQ are represented as ordered tuples of byte strings
(e.g., ["example.com", "live", "sports"]). Match rules operate on these
tuples at tuple element boundaries. The pattern in a MatchRule (defined in Section 3.2.4) is also a
tuple of byte strings, and matching is performed element-by-element.¶
As for track names, match rules can be applied directly given there is a single tuple element.¶
No normalization is performed on namespace tuple elements or track name values before matching. Comparisons are performed as byte-level operations on each tuple element.¶
MatchType wire representation is as follows¶
enum {
MATCH_EXACT(0),
MATCH_PREFIX(1),
MATCH_SUFFIX(2),
MATCH_CONTAINS(3),
(255)
} MatchType;
¶
When authorization scope is bound at issuance time, the origin_info field
contains a binary-encoded MoQAuthorizationInfo structure:¶
struct {
opaque element<0..2^16-1>;
} TupleElement;
struct {
TupleElement elements<0..2^16-1>;
} NamespaceTuple;
struct {
MatchType match_type;
NamespaceTuple value;
} NamespaceMatchRule;
struct {
MatchType match_type;
opaque value<0..2^16-1>;
} TrackNameMatchRule;
struct {
MoQAction actions<1..2^8-1>;
NamespaceMatchRule namespace_match;
TrackNameMatchRule track_name_match;
} MoQAuthScope;
struct {
MoQAuthScope scopes<1..2^8-1>;
} MoQAuthorizationInfo;
¶
A token MAY contain multiple MoQAuthScope entries to authorize different
combinations of actions and resource patterns. Authorization succeeds if
ANY scope in the token permits the requested operation.¶
The following examples illustrate authorization scope configurations:¶
Subscribe to live sports namespace (prefix match):¶
MoQAuthScope {
actions = [SUBSCRIBE(4)],
namespace_match = {
match_type = MATCH_PREFIX(1),
value = ["sports.example.com", "live"]
},
track_name_match = {
match_type = MATCH_PREFIX(1),
value = ""
}
}
¶
This matches namespace tuples like ["sports.example.com", "live", "soccer"]
and ["sports.example.com", "live", "tennis", "finals"].¶
Publish to specific meeting track (exact match):¶
MoQAuthScope {
actions = [PUBLISH(6)],
namespace_match = {
match_type = MATCH_EXACT(0),
value = ["meetings.example.com", "meeting", "m123"]
},
track_name_match = {
match_type = MATCH_PREFIX(1),
value = "audio-"
}
}
¶
This matches only the exact namespace tuple ["meetings.example.com", "meeting", "m123"]
with track names starting with "audio-".¶
Fetch video-on-demand with suffix matching:¶
MoQAuthScope {
actions = [FETCH(7)],
namespace_match = {
match_type = MATCH_CONTAINS(3),
value = ["vod", "movies"]
},
track_name_match = {
match_type = MATCH_SUFFIX(2),
value = ".mp4"
}
}
¶
This matches namespace tuples containing the contiguous subsequence
["vod", "movies"], such as ["example.com", "vod", "movies", "action"].¶
This specification defines matching rules for track namespaces and track names
to enable fine-grained access control while maintaining privacy. Both namespace
and track name matching use the same MatchRule structure and algorithm.¶
Given a MatchRule and a target value (namespace tuple or track name), the
match succeeds according to the following rules. For namespace matching, both
the pattern and target are tuples of byte strings; matching operates at tuple
element boundaries.¶
MATCH_EXACT (0):¶
The target MUST be identical to the pattern. For namespace
tuples, this means the same number of elements with each element byte-for-byte
identical. The pattern tuple ["example.com", "live"] matches only
["example.com", "live"], not ["example.com", "live", "sports"].¶
MATCH_PREFIX (1):¶
The target MUST start with the pattern at tuple element
boundaries. The pattern tuple ["example.com", "live"] matches
["example.com", "live", "sports"] and ["example.com", "live", "news", "breaking"]
but not ["example.com", "vod"]. Note that ["example.com", "liv"] does NOT
match ["example.com", "live"] since matching is at element boundaries.¶
MATCH_SUFFIX (2):¶
The target MUST end with the pattern at tuple element
boundaries. The pattern tuple ["audio"] matches ["meeting123", "audio"] and
["conference", "room1", "audio"] but not ["audio", "opus"].¶
MATCH_CONTAINS (3):¶
The target MUST contain the pattern as a contiguous
subsequence of tuple elements. The pattern tuple ["live", "sports"] matches
["example.com", "live", "sports", "soccer"] but the single-element pattern
["sports"] does NOT match ["live-sports", "channel"] since "sports" is a
substring within an element, not a complete element.¶
Note: To match all values, use MATCH_PREFIX with an empty pattern ([] for
namespaces or "" for track names). An empty pattern is a prefix of every value.¶
When a MoQ relay receives a request with a Privacy Pass token, it performs the following validation steps to determine whether to authorize the requested operation:¶
Token Extraction: Extract the Privacy Pass token from the MoQ control message (SETUP, SUBSCRIBE, FETCH, PUBLISH, PUBLISH_NAMESPACE, or other operation).¶
Token Verification: Verify the token using the appropriate method for the token type:¶
Replay Protection: Validate that the token has not been replayed:¶
Scope Extraction: Extract authorization scope from the token:¶
If using origin_info: Decode the MoQAuthorizationInfo structure¶
Scope Evaluation: For each MoQAuthScope in the token, check if the
requested operation is authorized:¶
a. Action Check: Verify the requested MoQ action (from Section 3.2.2)
is present in the scope's actions list¶
b. Namespace Match: Apply the namespace_match rule to the requested
track namespace using the algorithm in Section 3.2.3¶
c. Track Name Match: Apply the track_name_match rule to the requested
track name using the algorithm in Section 3.2.3¶
d. If all three checks pass, authorization succeeds for this scope¶
Authorization Decision: Access is granted if and only if:¶
If authorization fails, an error is returned as specified in Section 3.4.5.¶
Privacy Pass tokens are provided to MoQ relays using the existing MoQ authorization framework with the following adaptations:¶
Long-lived MoQ sessions (such as live streaming or real-time communication) require periodic re-authorization to ensure continued eligibility. Unlike JWT-based approaches that use explicit revalidation intervals, Privacy Pass can achieve continuous authorization through batched token issuance.¶
During the initial SETUP exchange, clients can request multiple tokens via
GenericBatchTokenRequest (defined in Section 6.1 of [PRIVACYPASS-BATCHED]).
Each token in the batch is independently valid
and can be presented for subsequent operations or periodic re-authorization.¶
Batched Token Usage Timeline:
Time 0: CLIENT_SETUP with Token_1, request batch of N tokens
SERVER_SETUP with batch of N tokens
Time T: SUBSCRIBE with Token_2 (from batch)
Time 2T: Client presents Token_3 for continued authorization
(proactive re-auth before relay requests it)
Time 3T: Relay requests re-authorization
Client presents Token_4
¶
Relays MAY request periodic re-authorization by sending a TokenChallenge
in a REQUEST_ERROR message. Clients SHOULD present a fresh token from their
batch in response if any satisfy the new TokenChallenge. If not, they SHOULD
perform a new issuance process.¶
When using [ARC] tokens (0xE5AC), the credential's presentation_limit controls
how many times the client can present tokens from a single credential issuance.
This provides rate limiting while preserving unlinkability between presentations.¶
Deployment Considerations:¶
Batch size SHOULD be sufficient for the expected session duration¶
Relays SHOULD configure re-authorization intervals based on content sensitivity and trust requirements¶
Clients SHOULD request new token batches before exhausting their supply¶
For high-security deployments, shorter re-authorization intervals with smaller batches provide stronger revocation guarantees¶
If the client and the relay support it, a Relay MAY perform continuous authentication using a reverse flow.¶
To do so, when presenting PrivateTokenAuth, a client MUST send at least one
GenericBatchTokenRequest. The Relay then acts as a reverse issuer, and issues
the corresponding number of GenericBatchTokenResponse.¶
Tokens obtained this way can be presented by the Client to maintain the continuity of the session without linkability.¶
Reverse Flow Token Usage Timeline:
Time 0: CLIENT_SETUP with Token_1, request batch of 1 token
SERVER_SETUP with batch of 1 token
Time T: SUBSCRIBE with Token_2 (from batch), request batch of 1 token
Relay responds with batch of 1 token
Time 2T: Client presents Token_3 (from batch of time T), request batch of 1 token
Relay responds with batch of 1 token
¶
If the authentication fails for any reason, the server MUST send an error.
The error response includes a TokenChallenge to enable the client to obtain
a valid token and retry the operation.¶
If authentication fails during SETUP, the Relay MUST terminate the connection
with the UNAUTHORIZED (0x02) Termination Error Code defined in
Section 3.4 of [MoQ-TRANSPORT]. The termination reason phrase MUST contain
a MoQAuthChallenge structure:¶
struct {
TokenChallenge challenges<1..2^16-1>;
} MoQAuthChallenge;
¶
The challenges field lists token challenges the relay accepts, ordered
by preference (most preferred first). This allows clients to select an appropriate
issuance protocol based on supported token types and issuers. Each challenge
specifies a token type, issuer, and optional scope, enabling relays to accept
different issuers or scopes for different token types. Relay MUST include at
least one challenge.¶
If the error occurs over an established connection, the Relay MUST send a REQUEST_ERROR
defined in Section 9.8 of [MoQ-TRANSPORT].¶
The error code MUST be one of:¶
| Error Code | Name | Description |
|---|---|---|
| 0x0100 | TOKEN_MISSING | No token provided when required |
| 0x0101 | TOKEN_INVALID | Token signature verification failed |
| 0x0102 | TOKEN_EXPIRED | Token has expired or been revoked |
| 0x0103 | TOKEN_REPLAYED | Token nonce has been seen before |
| 0x0104 | SCOPE_MISMATCH | Token scope does not authorize this operation |
| 0x0105 | ISSUER_UNKNOWN | Token issuer is not trusted by this relay |
| 0x0106 | TOKEN_MALFORMED | Token cannot be parsed correctly |
The reason phrase in REQUEST_ERROR MUST contain a MoQAuthChallenge structure
when the client should retry with a new token, encoded as a byte-string.¶
Each TokenChallenge in MoQAuthChallenge MUST be constructed as follows:¶
token_type: The token type for this challenge¶
issuer_name: The issuer name that can issue tokens for this challenge¶
redemption_context: A fresh 32-byte random value, or empty if the relay
accepts tokens with any redemption context¶
origin_info: The relay's origin identifier, optionally including the
required authorization scope¶
Different challenges MAY specify different issuers or scopes for different
token types. When origin_info is empty, the relay accepts tokens with any
scope and performs authorization based solely on the token's embedded scope
information.¶
REQUEST_ERROR {
Request_ID = 42,
Error_Code = 0x0104, /* SCOPE_MISMATCH */
Reason = MoQAuthChallenge {
challenges = [
TokenChallenge {
token_type = 0x0002,
issuer_name = "public-issuer.example.com",
redemption_context = <32 random bytes>,
origin_info = <authorization scope>
},
TokenChallenge {
token_type = 0xE5AC,
issuer_name = "relay.example.com",
redemption_context = <32 random bytes>,
origin_info = <authorization scope>
},
TokenChallenge {
token_type = 0x0001,
issuer_name = "relay.example.com",
redemption_context = <32 random bytes>,
origin_info = <authorization scope>
}
]
}
}
¶
When authorization fails for MoQ control messages other than SETUP, the relay
returns a REQUEST_ERROR with the appropriate error code from Table 3.
The client MAY retry the operation with a valid token obtained using the
TokenChallenge from the error response.¶
As per Section 3.4.4 of [MoQ-TRANSPORT], implementations MAY elevate request-specific errors to session-level errors. This elevation is appropriate when:¶
The authorization failure indicates a systemic issue (e.g., all client tokens are from an untrusted issuer)¶
Continuing the session would be futile due to policy restrictions¶
The error represents a security concern requiring session termination¶
Implementations need to consider the impact on other outstanding subscriptions before elevating to session-level errors.¶
TODO: Add considerations for the security and privacy of the Privacy Pass tokens.¶
IANA is requested to create a new registry titled "MoQ Privacy Pass Auth Schemes" with the following initial contents:¶
| Value | Name | Reference |
|---|---|---|
| 0x00 | Reserved | This document |
| 0x01 | PrivateTokenAuth | This document |
New entries in this registry require Specification Required registration policy.¶
IANA is requested to create a new registry titled "MoQ Actions for Privacy Pass Authorization" with the following initial contents:¶
| Value | Action | Reference |
|---|---|---|
| 0 | CLIENT_SETUP | Section 3.2.2 |
| 1 | SERVER_SETUP | Section 3.2.2 |
| 2 | PUBLISH_NAMESPACE | Section 3.2.2 |
| 3 | SUBSCRIBE_NAMESPACE | Section 3.2.2 |
| 4 | SUBSCRIBE | Section 3.2.2 |
| 5 | REQUEST_UPDATE | Section 3.2.2 |
| 6 | PUBLISH | Section 3.2.2 |
| 7 | FETCH | Section 3.2.2 |
| 8 | TRACK_STATUS | Section 3.2.2 |
| 9-254 | Unassigned | |
| 255 | Reserved | This document |
New entries in this registry require Specification Required registration policy. Values SHOULD align with MoQTransport control message types where applicable.¶
IANA is requested to create a new registry titled "MoQ Match Types for Privacy Pass Authorization" with the following initial contents:¶
| Value | Match Type | Reference |
|---|---|---|
| 0 | MATCH_EXACT | Section 3.2.3 |
| 1 | MATCH_PREFIX | Section 3.2.3 |
| 2 | MATCH_SUFFIX | Section 3.2.3 |
| 3 | MATCH_CONTAINS | Section 3.2.3 |
| 4-254 | Unassigned | |
| 255 | Reserved | This document |
New entries in this registry require Specification Required registration policy.¶
IANA is requested to create a new registry titled "MoQ Privacy Pass Authorization Error Codes" with the following initial contents:¶
| Value | Name | Reference |
|---|---|---|
| 0x0100 | TOKEN_MISSING | Section 3.4.5 |
| 0x0101 | TOKEN_INVALID | Section 3.4.5 |
| 0x0102 | TOKEN_EXPIRED | Section 3.4.5 |
| 0x0103 | TOKEN_REPLAYED | Section 3.4.5 |
| 0x0104 | SCOPE_MISMATCH | Section 3.4.5 |
| 0x0105 | ISSUER_UNKNOWN | Section 3.4.5 |
| 0x0106 | TOKEN_MALFORMED | Section 3.4.5 |
| 0x0107-0x01FF | Unassigned |
New entries in this registry require Specification Required registration policy. Values are allocated from the 0x0100-0x01FF range reserved for Privacy Pass authorization errors.¶
TODO acknowledge.¶
RFC Editor's Note: Please remove this section prior to publication of a final version of this document.¶
Expanded reverse flow documentation with three-phase flow (bootstrap, exchange, operations)¶
Defined MoQAuthChallenge structure for error responses with supported_token_types¶
Added TokenChallenge construction requirements¶
Added control message authorization failure handling section¶
Documented credential request/response encoding for different token types¶
Replace text-based moq-scope with binary TLS presentation language structures¶
Add MoQ Actions registry aligned with MoQTransport control message types¶
Add Match Types registry with exact, prefix, suffix, and contains matching¶
Define MoQAuthorizationInfo structure for origin_info encoding¶
Add continuous authorization section using reverse flow¶
Add continuous authorization section using batched tokens¶
Add IANA registries for auth schemes, actions, and match types¶
Define error handling¶
Integrate privacy pass reverse flow within PrivateTokenAuth¶
MoQ definition now follow draft-ietf-moq-transport-16¶
Update dependencies¶
Removed b64 encoding given MoQ can use bytes directly¶