HTTP Signature

Description

Certaines API nécessitent une signature HTTP pour une sécurité renforcée. Votre clé privée (voir la documentation correspondante) est requise à cet effet. L'en-tête HTTP respecte la norme IETF relative aux messages HTTP de signature, avec les particularités suivantes :

  • La valeur keyId correspond à votre app_id
  • Le seul algorithme pris en charge est rsa-sha256

Toutes les API demandant une signature HTTP nécessitent les paramètres d'en-tête suivants :

NomsMéthodeDescriptionExemple
dateToutesDate au format RFC 2822Wed, 26 Feb 2020 17:29:51 GMT
digestPOST, PATCHPayload hachéSHA-256=cjuagrzhZ8joOWLlQCCe5co30bRISL1VIWNq99da+hM=
x-request-idToutesIdentifiant UUID v4123e4567-e89b-12d3-a456-42665544
SignatureToutesSignature HTTPkeyId="0354d723-d8d3-469a-8926-4f3f18b2c416",algorithm="rsa-sha256",headers="(request-target) date x-request-id",signature="eyvAyh5kuqifP8vkUy5KBWPgtQAurB7xMeC6T/KGJQm2JA=="

🚧 Important

Les en-êtes sont facultatifs dans l'environnement SANDBOX mais obligatoires en environnement de PRODUCTION.

💡 Un guide interactif sur les signatures HTTP a été créé pour vous aider dans le processus de création des en-têtes digest et signature.

Procédure

1. Créer le paramètre digest

Le paramètre digest est un hachage SHA-256 du payload, encodé en base64 et concaténé avec le préfixe « SHA-256 ».

Fonction digest
digest = "SHA-256=" + base64( SHA256( body ) )

💡 Assurez-vous que le body est encodé en UTF-8 avec Unicode non échappé afin d'éviter les mauvaises surprises en cas d'accents ou d'autres caractères spéciaux.

2. Créer les paramètres de signature

NomDescriptionExemple
(request-target)Méthode et chemin d'accès d'une URLget /ais/v1/customer/123/accounts
dateUne date au format RFC 2822Wed, 26 Feb 2020 17:29:51 GMT
digestLe digest SHA-256 du body tel que décrit au point 1SHA-256=cjuagrzhZ8joOWLlQCCe5co30bRISL1VIWNq99da+hM=
x-request-idUne valeur unique formatée UUID v4123e4567-e89b-12d3-a456-42665544

3. Construire la chaîne de signature

Pour les requêtes GET et DELETE, utilisez les paramètres suivants :

  • (request-target)
  • date
  • x-request-id

Pour les requêtes POST et PATCH, utilisez les paramètres suivants

  • (request-target)

  • date

  • digest

  • x-request-id

💡 Assurez-vous que le nom de chaque paramètre est en minuscules (et non la valeur), qu'il y a un « : » entre le nom et la valeur, et qu'un caractère de retour « \n » est présent à la fin de chaque ligne, sauf la dernière. Pour le paramètre request-target, incluez les paramètres querydans le chemin d'accès.

4. Chiffrer la chaîne de signature

Utilisez votre clé privée et encodez-la en base64 :

Fonction de signature
signature = base64( RSA-SHA256( signing string ) )

5. Créer la signature finale

Concaténez tous les champs en les séparant par une virgule (",").

Pour les requêtes GET et DELETE :

keyId=`app_id`,
algorithm=rsa-sha256,
headers=(request-target) date x-request-id,
signature=`signature`

Pour les requêtes POST et PATCH :

keyId=`app_id`,
algorithm=rsa-sha256,
headers=(request-target) date digest x-request-id,
signature=`signature`

Cela donne une signature HTTP avec la structure suivante :

keyId="0354d723-d8d3-469a-8926-4f3f18b2c416",algorithm="rsa-sha256",headers="(request-target) date digest x-request-id",signature="eyvAyh5kuqifP8vkUy5KBWPgtQAurB7xMeC6T/KGJQm2JA=="