Autenticação de integração
Bearer token mais HMAC sobre timestamp, nonce e raw body.
Headers obrigatórios
| Header | Valor |
|---|---|
| Authorization | Bearer <token> |
| Content-Type | application/json |
| X-AACT-Timestamp | Segundos Unix |
| X-AACT-Nonce | String aleatória única por pedido |
| X-AACT-Signature | hex(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);- Cliente e notifier completos
Helpers PHP e TypeScript prontos a adaptar