Pular para o conteúdo principal

Chaves de API

Onde a credencial S2S com que o backend de um casino se autentica é emitida e revogada.

Casino → Chaves de API. Ler a lista custa apikeys.read; emitir e revogar custam apikeys.write.

Emitindo

Escolha um rótulo e os escopos. O rótulo é para pessoas, então faça ele nomear o consumidor ("serviço de pedidos") em vez do casino, que já está implícito. Você vai precisar dele para distinguir duas chaves depois.

EscopoConcede
games:readLer o catálogo
battles:readLer batalhas
battles:writeAbrir e gerenciar batalhas
bots:writeSentar bots
viewer:mintEmitir tokens de viewer
demo:mintEmitir uma sessão de jogo demo. Só avaliação, nunca o fluxo de produção

bots:write é separado de battles:write e é o mais esquecido. Sentar bots gasta as sessões de provedor do próprio casino, o que é um ato diferente de abrir um lobby. Uma chave sem ele só falha quando alguém tenta encher a mesa, o que é tarde.

O texto puro é mostrado uma vez

sbk_0a1b2c3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c6d7e8f9

Só o hash SHA-256 é armazenado, mais os 12 primeiros caracteres para exibição. Não há como mostrar de novo: perder significa emitir uma substituta e revogar a antiga.

Entregue por algo que não seja histórico de chat.

Rotacionando

Não há rotação no lugar. A ordem importa:

  1. Emita a substituta.
  2. Faça o deploy dela no consumidor.
  3. Só então revogue a antiga.

Revogar primeiro significa indisponibilidade por todo o tempo do deploy.

Uma chave por consumidor

Revogar uma chave compartilhada entre serviços derruba todos eles de uma vez. Emita separadamente e com escopo estreito, para uma chave comprometida custar um serviço em vez do casino.

A revogação é imediata

Não há cache na frente da consulta de chaves, então não há nada para esperar, nem mesmo a janela de 30 segundos que a allowlist de jogos pode ter.

Tudo é atribuído

Emitir e revogar registram quem fez, como o endereço do ator na época, capturado em vez de guardado como chave estrangeira para a tabela de usuários.

Uma chave estrangeira faria cascade ou viraria nula quando aquele usuário fosse apagado, apagando o registro.

O ator sempre vem da sessão, nunca do corpo da requisição. Nomear um no payload é 400.

CLI / unknown não é bug

Uma chave que o seu host emitiu fora do console não tem operador logado, então o console renderiza CLI / unknown em vez de uma célula vazia, que pareceria falha de renderização. Chaves que você emite pelo console levam o seu nome.

Checklist para entregar uma chave

  • Os escopos batem com o que vão de fato fazer, incluindo bots:write se usarem bots
  • O rótulo nomeia o consumidor, não o casino
  • Entregue de forma segura, uma vez
  • Eles sabem que ela não pode ser recuperada
  • Eles sabem que ela nunca pode chegar a um browser