Vignetim

Authentification

Chaque requete envoyee a l'API Partenaire doit etre authentifiee a l'aide de la signature de requete HMAC-SHA256. Cela garantit que les requetes sont authentiques et n'ont pas ete alterees pendant le transit.

En-tetes requis

En-teteDescription
X-API-KeyVotre cle API d'organisation
X-TimestampHorodatage Unix actuel en secondes (par ex., 1711000000)
X-NonceUne chaine unique par requete (UUID v4 recommande)
X-SignatureSignature hexadecimale HMAC-SHA256 de la requete

Construction de la signature

La signature est calculee en construisant une chaine de message separee par des points et en la signant avec le secret de votre cle API :

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

Les composants du message, joints par des points (.) :

  1. timestamp — Horodatage Unix en secondes (meme valeur que l'en-tete X-Timestamp)
  2. nonce — La meme valeur envoyee dans l'en-tete X-Nonce
  3. method — La methode HTTP en majuscules (par ex., GET, POST)
  4. path — Le chemin complet de la requete (par ex., /v2/partners/products/tickets)
  5. body — La chaine brute du corps de la requete en JSON. Pour les requetes GET sans corps, utilisez une chaine vide ""

Le condensat HMAC resultant doit etre encode en hexadecimal minuscule.

Exemples

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}"

Notes importantes

  • Le X-Timestamp doit etre dans un intervalle de 5 minutes (300 secondes) par rapport a l'heure du serveur. Les requetes avec un horodatage expire seront rejetees avec une erreur 401.
  • Chaque valeur X-Nonce doit etre unique et ne peut etre utilisee qu'une seule fois. La reutilisation d'un nonce entrainera une erreur 401.
  • Utilisez toujours la chaine JSON brute et non formatee du corps pour le calcul de la signature. Ne mettez pas en forme et ne re-serialisez pas le corps avant de le signer.
  • La signature doit etre encodee en hexadecimal minuscule. N'utilisez pas le base64.