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čka | Popis |
|---|---|
X-API-Key | Váš organizační API klíč |
X-Timestamp | Aktuální Unix časové razítko v sekundách (např. 1711000000) |
X-Nonce | Jedinečný řetězec pro každý požadavek (doporučeno UUID v4) |
X-Signature | Hexadecimá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 (.):
- timestamp — Unix časové razítko v sekundách (stejná hodnota jako hlavička
X-Timestamp) - nonce — Stejná hodnota odeslaná v hlavičce
X-Nonce - method — HTTP metoda velkými písmeny (např.
GET,POST) - path — Úplná cesta požadavku (např.
/v2/partners/products/tickets) - 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-Timestampmusí být v rozmezí 5 minut (300 sekund) od času serveru. Požadavky se zastaralým časovým razítkem budou odmítnuty s chybou401.- Každá hodnota
X-Noncemusí 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.