Vignetim

Autentizace (Authentication)

Každý požadavek na Partner API musí být ověřen pomocí podepisování požadavků HMAC-SHA256. To zajišťuje, že požadavky jsou autentické a nebyly během přenosu pozměněny.

Požadované hlavičky

HlavičkaPopis
X-API-KeyVáš organizační API klíč
X-TimestampAktuální Unix časové razítko v sekundách (např. 1711000000)
X-NonceJedinečný řetězec pro každý požadavek (doporučeno UUID v4)
X-SignatureHexadecimální podpis HMAC-SHA256 požadavku

Vytvoření podpisu

Podpis se vypočítá sestavením řetězce zprávy oddělené tečkami a jeho podepsáním vaším tajným klíčem API:

message = "{timestamp}.{nonce}.{method}.{path}.{body}"
signature = HMAC-SHA256(apiKeySecret, message).hexDigest()

Komponenty zprávy spojené tečkami (.):

  1. timestamp — Unix časové razítko v sekundách (stejná hodnota jako hlavička X-Timestamp)
  2. nonce — Stejná hodnota odeslaná v hlavičce X-Nonce
  3. method — HTTP metoda velkými písmeny (např. GET, POST)
  4. path — Úplná cesta požadavku (např. /v2/partners/products/tickets)
  5. body — Surový řetězec těla požadavku ve formátu JSON. Pro GET požadavky bez těla použijte prázdný řetězec ""

Výsledný HMAC digest musí být zakódován jako hexadecimální malými písmeny.

Příklady

API_KEY="your-api-key"
API_SECRET="your-api-secret"
TIMESTAMP=$(date +%s)
NONCE=$(uuidgen | tr '[:upper:]' '[:lower:]')
METHOD="GET"
REQ_PATH="/v2/partners/products/tickets"
BODY=""

MESSAGE="${TIMESTAMP}.${NONCE}.${METHOD}.${REQ_PATH}.${BODY}"

SIGNATURE=$(echo -n "${MESSAGE}" | \
  openssl dgst -sha256 -hmac "${API_SECRET}" | \
  awk '{print $2}')

curl -X GET "https://api.vignetim.com${REQ_PATH}" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: ${API_KEY}" \
  -H "X-Timestamp: ${TIMESTAMP}" \
  -H "X-Nonce: ${NONCE}" \
  -H "X-Signature: ${SIGNATURE}"

Důležité poznámky

  • X-Timestamp musí být v rozmezí 5 minut (300 sekund) od času serveru. Požadavky se zastaralým časovým razítkem budou odmítnuty s chybou 401.
  • Každá hodnota X-Nonce musí být jedinečná a lze ji použít pouze jednou. Opětovné použití nonce povede k chybě 401.
  • Pro výpočet podpisu vždy používejte surový, neformátovaný řetězec JSON těla. Před podepsáním tělo neformátujte ani znovu neserializujte.
  • Podpis musí být zakódován hexadecimálně malými písmeny. Nepoužívejte base64.