Autenticação de integração

Bearer token mais HMAC sobre timestamp, nonce e raw body.

Headers obrigatórios

HeaderValor
AuthorizationBearer <token>
Content-Typeapplication/json
X-AACT-TimestampSegundos Unix
X-AACT-NonceString aleatória única por pedido
X-AACT-Signaturehex(hmac_sha256(secret, timestamp + '.' + nonce + '.' + rawBody))

Bearer + HMAC + proteção de replay por nonce· implementado

Notas de assinatura

  • Assine exactamente os bytes do raw body enviados — não re-serialize depois de assinar
  • O timestamp tem de estar na janela de skew configurada
  • Nonces são únicos por credencial; reutilizar devolve 422
  • Rodar credenciais no admin (step-up). Novos segredos não quebram chaves de idempotência históricas

Esboços de assinatura

typescript · TypeScript
import { createHmac, randomBytes } from "node:crypto";

const rawBody = JSON.stringify(body);
const timestamp = Math.floor(Date.now() / 1000).toString();
const nonce = randomBytes(16).toString("hex");
const signature = createHmac("sha256", hmacSecret)
  .update(`${timestamp}.${nonce}.${rawBody}`)
  .digest("hex");
php · PHP
$rawBody = json_encode($body, JSON_THROW_ON_ERROR | JSON_UNESCAPED_SLASHES);
$timestamp = (string) time();
$nonce = bin2hex(random_bytes(16));
$signature = hash_hmac('sha256', $timestamp.'.'.$nonce.'.'.$rawBody, $hmacSecret);