Integração: tickets do Catena¶
Esta página é para o desenvolvedor de uma vitrine ou sistema de cobrança — o lugar onde você vende o acesso. Em vez de responder a um callback por cada espectador, você cria a sessão com antecedência e entrega ao espectador um ticket. O streamer admite o ticket por conta própria: verifica a assinatura, a validade e o escopo localmente, sem chamar os seus sistemas no caminho de reprodução.
A recompensa: a reprodução não depende mais da velocidade nem da disponibilidade da sua vitrine, os canais arrancam e trocam na hora, e não há um callback por espectador para escalar. Os seus sistemas são necessários no momento em que você vende o acesso — não enquanto o espectador assiste.
Criar uma concessão¶
Ao vender acesso, chame o management API para criar uma concessão (grant). O Catena assina um ticket (um JWT) e o devolve — o token é entregue apenas na criação; o registro guarda a concessão, não o ticket.
Autentique a chamada como você autentica qualquer requisição ao management API — com o login e a senha de administrador. Para que a sua vitrine nunca precise guardar credenciais de administrador completas, você pode em vez disso configurar no central uma chave de emissor (issuer key) dedicada — um token bearer cujo único poder é emitir e gerir concessões — e enviá-lo como Authorization: Bearer <issuer-key>.
POST /play-sessions/grants
{
"streams": ["news", "arena"],
"user_id": "subscriber-4821",
"ttl_secs": 14400,
"max_concurrent": 2,
"bind_ip": "203.0.113.0/24",
"note": "family plan"
}
| Campo | Significado |
|---|---|
streams |
Quais canais o ticket pode reproduzir — o seu escopo |
user_id |
A conta a que o ticket pertence; agrupa as telas do espectador |
ttl_secs |
Vida do ticket; padrão 4 horas. exp é um fim fixo — uma sessão não pode sobreviver a ele (os reprodutores não renovam o token) |
max_concurrent |
Telas simultâneas; padrão 1, null para ilimitado |
bind_ip |
IP ou CIDR opcional fora do qual o ticket é inútil |
note |
Rótulo de texto livre opcional |
A resposta carrega a concessão e o token. Entregue esse token ao reprodutor, que o apresenta na URL de reprodução como ?token=<jwt> (ou num cabeçalho Authorization: Bearer). Nada mais é pedido ao espectador — o streamer cuida do resto.
Telas¶
max_concurrent limita quantas telas consomem ativamente o ticket ao mesmo tempo — uma casa com dois televisores, por exemplo. Passe do limite e a tela mais antiga é cortada; a mais nova vence. Você pode mudar o limite depois sem reemitir o ticket, porque ele vive no registro, não no token assinado:
PATCH /play-sessions/grants/{jti}
{ "max_concurrent": 3 }
Revogar¶
Cancele uma concessão e cada streamer solta os seus espectadores em segundos e recusa o ticket dali em diante — o cancelamento viaja aos streamers por um feed de revogação, não esperando o ticket expirar. Não há reautorização para as sessões de ticket; a revogação é o único canal que as termina antes do tempo.
Roaming¶
Um espectador cujo endereço muda — um telefone que sai do Wi-Fi para os dados móveis — é admitido de novo no novo endereço, offline, enquanto a sessão antiga morre por inatividade. Conta como um único percurso, não como uma nova cobrança, agrupado pela concessão. Se você definir bind_ip, o roaming fica dentro dessa faixa.
Listagem e status¶
GET /play-sessions/grants lista as concessões e o seu status — issued (entregue, ainda não reproduzida), played (usada ao menos uma vez), revoked, expired —, filtrável por user_id e status. É o registro do que você vendeu e se foi usado.
Migre no seu ritmo¶
Os tickets e um backend existente correm lado a lado — tickets para uns espectadores, o callback para outros — então você pode mover audiência por audiência. O estado final é o interruptor opaque_tokens: false na política de autorização: uma vez definido, qualquer token que não seja um ticket é recusado de imediato, sem consultar listas nem um backend, e a via do callback fica fechada de vez.
Próximos passos¶
- Proteger a reprodução — a mesma política vista pelo operador.
- Ciclo de vida da sessão — como uma sessão de ticket abre, fecha e sobrevive a um tropeço do cluster.
- autorização flussonic — a via de callback da qual você migra.