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 :
| Noms | Méthode | Description | Exemple |
|---|---|---|---|
| date | Toutes | Date au format RFC 2822 | Wed, 26 Feb 2020 17:29:51 GMT |
| digest | POST, PATCH | Payload haché | SHA-256=cjuagrzhZ8joOWLlQCCe5co30bRISL1VIWNq99da+hM= |
| x-request-id | Toutes | Identifiant UUID v4 | 123e4567-e89b-12d3-a456-42665544 |
| Signature | Toutes | Signature HTTP | keyId="0354d723-d8d3-469a-8926-4f3f18b2c416",algorithm="rsa-sha256",headers="(request-target) date x-request-id",signature="eyvAyh5kuqifP8vkUy5KBWPgtQAurB7xMeC6T/KGJQm2JA==" |
🚧 ImportantLes 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
digestLe 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 lebodyest 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
| Nom | Description | Exemple |
|---|---|---|
| (request-target) | Méthode et chemin d'accès d'une URL | get /ais/v1/customer/123/accounts |
| date | Une date au format RFC 2822 | Wed, 26 Feb 2020 17:29:51 GMT |
| digest | Le digest SHA-256 du body tel que décrit au point 1 | SHA-256=cjuagrzhZ8joOWLlQCCe5co30bRISL1VIWNq99da+hM= |
| x-request-id | Une valeur unique formatée UUID v4 | 123e4567-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)datex-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ètrerequest-target, incluez les paramètresquerydans 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=="Updated about 2 months ago
