API V1 · C# / .NET

Uma integração pequena.
Um contrato difícil de falsificar.

Guia para consultar e registrar bans de hack a partir de uma DLL server-side. Todos os exemplos assumem HTTPS, segredo fora do código-fonte e uma chave exclusiva por servidor.

Visão geral

A API é destinada a chamadas servidor → servidor. Ela não deve ser acessada pelo cliente do jogador e a chave nunca deve ser enviada junto da DLL de cliente. O SteamID64 é o identificador principal; nome e avatar servem apenas para exibição.

Regra central

A rede retorna fatos registrados. A DLL parceira continua responsável por sua ação local e por oferecer revisão administrativa.

BASE URLhttps://SEU-DOMINIO/api/v1
FORMATOJSON UTF-8
RELÓGIOUTC; tolerância máxima de 5 minutos
TAMANHO32 KB por registro

Autenticação

Cada servidor recebe uma chave própria no formato als_live_PREFIXO.SEGREDO. O painel exibe o segredo uma única vez. No banco, a chave fica derivada com um pepper separado; nunca em texto puro.

  1. Guarde a chave em variável de ambiente ou arquivo protegido somente pelo usuário do servidor.
  2. Envie a chave como Authorization: Bearer ....
  3. Assine toda requisição com a mesma chave.
  4. Rotacione imediatamente em caso de suspeita.
Nunca faça log da chave

Redija o cabeçalho Authorization e não inclua a chave em mensagens de erro, telemetria ou screenshots.

Assinatura e anti-replay

A assinatura é HMAC-SHA256 em hexadecimal minúsculo. O corpo é calculado exatamente nos bytes UTF-8 enviados. Para GET sem corpo, use o SHA-256 da string vazia.

CANONICAL STRINGHMAC-SHA256(apiKey, canonical)
timestamp + "\n" +
nonce + "\n" +
method.ToUpperInvariant() + "\n" +
pathAndQuery + "\n" +
sha256Hex(bodyUtf8)
  • X-ALS-Timestamp: Unix time em segundos.
  • X-ALS-Nonce: valor aleatório único de 16 a 128 caracteres.
  • X-ALS-Content-SHA256: SHA-256 hexadecimal do corpo.
  • X-ALS-Signature: HMAC hexadecimal da string canônica.

Um nonce aceito não pode ser repetido. O timestamp evita reuso tardio e X-Idempotency-Key impede duplicação acidental de POST quando o servidor tenta novamente.

Endpoints

MÉTODOROTAESCOPOUSO
GET/bans/{steamId64}bans:readConsulta registros ativos.
POST/bansbans:writeRegistra um ban técnico.
DELETE/bans/{banId}bans:revokeRevoga ban criado pela mesma origem.
GET/healthpúblicoVerifica disponibilidade, sem dados.

Exemplo de registro

HTTPREQUISIÇÃO ASSINADA
POST /api/v1/bans HTTP/1.1
Authorization: Bearer als_live_ID.SEGREDO
X-ALS-Timestamp: 1786521000
X-ALS-Nonce: e29f6b7e4c9d4b2da11f609caed81cd3
X-ALS-Content-SHA256: <sha256-do-json>
X-ALS-Signature: <hmac-sha256-do-canonical>
X-Idempotency-Key: evento-unico-do-servidor
Content-Type: application/json
JSONBODY
{
  "steamId": "76561198000000000",
  "playerName": "PlayerExample",
  "reasonCode": "wallhack_esp",
  "reasonDetail": "Movimento e rastreio incompatíveis, revisão concluída.",
  "confidence": 96,
  "occurredAt": "2026-08-12T12:00:00.000Z",
  "evidenceHash": "<sha256-opcional>"
}

Exemplo de consulta

JSON200 OK
{
  "steamId": "76561198000000000",
  "matched": true,
  "reportCount": 1,
  "highestConfidence": 96,
  "policy": {
    "category": "hack_only",
    "decision": "local_server"
  },
  "reports": [ ... ]
}

Motivos aceitos

O contrato bloqueia motivos sociais, comerciais ou subjetivos. Apenas códigos técnicos abaixo entram na rede:

aimbotMira automática
wallhack_espVisão por parede / ESP
speedhackVelocidade impossível
flyhackVoo / noclip
impossible_damageDano ou modificação de combate impossível
inventory_exploitDuplicação ou exploit de inventário
anti_cheat_tamperingAdulteração do anti-cheat

Cliente C#

O cliente de referência reutiliza HttpClient, calcula SHA-256/HMAC com APIs da biblioteca padrão e usa Newtonsoft.Json, normalmente disponível no runtime do servidor.

C#NETSTANDARD2.1
using var client = new AlsSecurityClient(
    "https://seu-dominio.example",
    Environment.GetEnvironmentVariable("AL_SECURITY_API_KEY"));

BanLookupResult result = await client.CheckBanAsync(steamId);

if (result.Matched)
{
    // A decisão é local: alertar, expulsar ou bloquear.
    ApplyLocalPolicy(player, result);
}

Política local

Uma consulta retorna matched, relatórios, confiança e origem — não um comando oculto. Recomendamos começar em modo observação, revisar falsos positivos e só depois habilitar expulsão ou bloqueio automático.

  1. Observar: apenas log privado para os administradores.
  2. Alertar: avisa a equipe quando há correspondência.
  3. Expulsar: remove a sessão sem criar ban local.
  4. Bloquear: aplica ban local apenas acima do limiar escolhido.

Checklist de produção

  • Sincronizar relógio do servidor por NTP.
  • Usar uma chave diferente por servidor e ambiente.
  • Não distribuir a chave em DLL de cliente.
  • Definir timeout de 5 segundos e falhar aberto: indisponibilidade da rede não deve expulsar jogador.
  • Usar idempotência e retry com backoff apenas para 429/5xx.
  • Oferecer revisão e revogação administrativa.
  • Salvar evidência fora da API e registrar somente URL HTTPS/hash quando necessário.

Referências oficiais

A integração de perfil segue a interface ISteamUser da Valve; chaves Steam permanecem apenas no backend conforme a orientação de autenticação Steamworks. Para HTTP/JSON em C#, consulte a documentação oficial do .NET.