ExplicacionArquitectura del sistema

Capacidades SCT

El token firmado que autoriza cada acceso al data plane, quién lo emite, quién lo verifica y qué obliga.

Implementado. La especificación normativa del formato es protocols/capability-token/SCT_SPEC.md; el diseño está en dec-0117 §4.1.

Qué problema resuelve

El daemon tiene a la vez acceso a los ficheros y a la red. Por eso ninguna operación suya se autoriza con algo que el cliente pueda adivinar o reutilizar. El identificador de sesión deja de ser un secreto: es sólo un identificador. Lo que autoriza es una Styx Capability Token (SCT).

Las únicas operaciones del daemon sin capacidad son el apretón de manos QUIC/TLS y /health. Leer, suscribirse, hacer fetch, publicar o ingestar exigen una SCT válida.

Quién hace qué

PasoQuiénQué
Decidirplayback-svcResuelve quién es el actor y si puede leer, publicar o subir; abre la sesión en el daemon
Ligar la sesióndaemon, por el socket de controlGuarda la sesión con su actor y su recurso (sólo playback-svc puede crearla)
Firmarplayback-svcEd25519 con una clave privada que sólo tiene este servicio
PresentarclienteLa lleva en el parámetro de autorización (MoQT), en cap= (WebTransport y HTTP/3 desde el navegador) o en Authorization (clientes nativos)
Verificardaemon, con el verificador de spireUna sola implementación por lenguaje; el daemon sólo tiene claves públicas

La clave pública se identifica con un kid; el daemon acepta la actual y la siguiente, para poder rotar sin cortar sesiones.

Formato

No es un JWT. Es un formato binario versionado y de longitud fija por versión, en base64url, para evitar el análisis de JSON y la negociación de algoritmo en el data plane. Lleva versión, kid, audiencia (el nodo daemon), identificador de sesión, un hash del actor, el recurso (un asset o un espacio de nombres MoQT), el alcance, una restricción opcional de rango de bytes o de pistas, el intervalo de validez y un jti.

Alcances (scope): read, publish, ingest y control. Escribir exige un alcance de escritura y un recurso concreto; los alcances de publish e ingest son de un solo uso por jti al abrir el flujo. La vida de un token de lectura es corta y se renueva por el canal de control del cliente.

Qué obliga el daemon

  • Una SCT sólo es válida si su sesión existe y se creó por el socket de control con el mismo actor y el mismo recurso. Una firma correcta para una sesión inexistente se rechaza.
  • Las restricciones de rango y de pista se comprueban en cada petición, no sólo al abrir.
  • Un token revocado (cierre de sesión, caducidad, desligado) corta los flujos largos que abrió.
  • Las SCT nunca se escriben en logs: el parámetro cap= se redacta.

Ingesta

La subida de ficheros añade una dirección de datos nueva: el cliente sube directamente al daemon con una SCT de alcance ingest. playback-svc decide quién sube y firma la capacidad; el daemon sirve el protocolo de ingesta de conduit, verifica cada petición con el mismo verificador y escribe en una zona de preparación relativa al descriptor de la raíz de ingesta. Cuotas por fichero y por actor, y alta en el catálogo por el bus. Detalle en subir ficheros.

Qué viene

dec-0126 (PROPOSED) propone un alcance adicional para anotar metadatos dentro de un fichero ya existente. Hasta su lock no forma parte de este contrato.