HMAC berekenen¶
Verschillende API's (ZAGIS, en de POST-endpoints van PharmaPortal) vereisen een
HMAC in een header ter integriteitscontrole. De ontvanger berekent dezelfde
HMAC opnieuw; komen ze niet overeen, dan volgt een 401.
De HMAC is altijd op dezelfde manier opgebouwd:
| Eigenschap | Waarde |
|---|---|
| Algoritme | HMAC met SHA-512 |
| Sleutel | De aan uw organisatie uitgereikte API-secret |
| Invoer | De exacte bytes van het request body die u verstuurt |
| Codering | Hexadecimaal (lowercase) |
| Header | x-zagis-hmac, x-portal-hmac of x-zagis-offerte-hmac (zie de betreffende endpoint) |
Bereken de HMAC over exact wat u verstuurt
Serialiseer uw JSON of CSV één keer naar een string/bytes, gebruik díe
waarde zowel voor de HMAC als voor de request body, en verstuur haar
ongewijzigd. Als u de body opnieuw serialiseert (andere spaties, volgorde of
regeleindes) wijkt de HMAC af en krijgt u een 401.
Voorbeelden¶
De onderstaande voorbeelden berekenen de hex-HMAC van een request body met uw API-secret.
using System.Security.Cryptography;
using System.Text;
var secret = "uw-api-secret";
var body = "{\"zindexNummer\": 12345678}"; // exact de bytes die u verstuurt
using var hmac = new HMACSHA512(Encoding.UTF8.GetBytes(secret));
var hash = hmac.ComputeHash(Encoding.UTF8.GetBytes(body));
var signature = Convert.ToHexString(hash).ToLowerInvariant();
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
String secret = "uw-api-secret";
String body = "{\"zindexNummer\": 12345678}"; // exact de bytes die u verstuurt
Mac mac = Mac.getInstance("HmacSHA512");
mac.init(new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSHA512"));
byte[] hash = mac.doFinal(body.getBytes(StandardCharsets.UTF_8));
StringBuilder sb = new StringBuilder();
for (byte b : hash) sb.append(String.format("%02x", b));
String signature = sb.toString();
Volledig request (voorbeeld)¶
Bereken de HMAC over dezelfde body die u verstuurt en zet hem in de juiste header:
Testen
Neem voor een API-key en API-secret tijdig contact met ons op via info@zagis.nl.