Ga naar inhoud
TextArray

HMAC en hashing voor API-handtekeningen: webhooks beschermen

Blog /

Wanneer een service van derden u gegevens via webhook stuurt of u een API-verzoek moet authenticeren, heeft u een manier nodig om te bewijzen dat er niet met het bericht is geknoeid en dat het daadwerkelijk afkomstig is van degene die zegt dat dit wel het geval is. Hashing alleen lost dit niet op; je hebt HMAC nodig. Het begrijpen van het verschil tussen een gewone hash en een HMAC, en hoe je handtekeningen correct kunt verifiëren, is het verschil tussen een veilige en een gecompromitteerde integratie.

Wat is een hasj

Een hash is een eenrichtingsfunctie die elke invoer (tekst, bestand, API-antwoord) omzet in een tekenreeks met een vaste lengte. Dezelfde input produceert altijd dezelfde output. Veel voorkomende hash-algoritmen zijn SHA-256, SHA-1 en MD5. U kunt gebruik maken van een hash-generator om dit in actie te zien: "hallo" wordt altijd dezelfde SHA-256-hash. De belangrijkste eigenschap is dat hashing deterministisch is, maar onmogelijk ongedaan kan worden gemaakt; je kunt de originele invoer van de hash niet herstellen.

Wat is HMAC

HMAC staat voor Hash-based Message Authentication Code. In tegenstelling tot een gewone hash combineert HMAC een bericht met een geheime sleutel voordat het wordt gehasht. De webhookprovider heeft een geheime sleutel, hasht het bericht met die sleutel en stuurt het bericht en de hash naar u. Je herhaalt het proces met dezelfde geheime sleutel; als uw berekende hash overeenkomt met de verzonden hash, weet u dat het bericht authentiek en ongewijzigd is. De HMAC-generator tool laat je dit testen met je eigen boodschap en geheim.

Het cruciale verschil: hash versus HMAC

Dit is waarom dit belangrijk is:

Als een dienst u een webhook met alleen een hash stuurt, kan een aanvaller deze onderscheppen, de gegevens wijzigen en de hash opnieuw berekenen, zonder dat u het merkt. Met HMAC en een gedeeld geheim kan de aanvaller zonder de sleutel geen geldige handtekening vervalsen.

Webhookhandtekeningen in uw code verifiëren

Wanneer een webhook arriveert, biedt de service de payload van het bericht en een handtekeningheader (vaak X-Signature of X-Webhook-Signature). Uw code moet:

  1. Haal uw geheime sleutel op uit de beveiligde configuratie (omgevingsvariabelen, een geheime manager).
  2. Bereken de HMAC-SHA256 van de onbewerkte aanvraagtekst met behulp van die sleutel.
  3. Vergelijk uw berekende HMAC byte-voor-byte met de handtekeningheader (gebruik altijd constante tijdvergelijking om timingaanvallen te voorkomen).
  4. Als deze overeenkomen, is de webhook authentiek. Zo niet, wijs het dan af.

De meeste webhookproviders documenteren hun HMAC-algoritme en het exacte formaat dat moet worden ondertekend. Soms is dit de onbewerkte JSON-body, soms een tijdstempel die is samengevoegd met de body. Volg precies hun specificaties.

HMAC versus JWT: waar passen ze

JWT's (JSON Web Tokens) worden vaak verward met HMAC-handtekeningen. Een JWT is een op zichzelf staand token met drie delen: een header, een payload (claims) en een handtekening. De handtekening kan op HMAC of RSA gebaseerd zijn. JWT-decoders laat u tokens inspecteren en verifiëren. Terwijl HMAC's één enkel bericht verifiëren, zijn JWT's tokens die u opslaat en verzendt bij elk verzoek of elke API-aanroep. Voor webhooks en eenmalige berichtauthenticatie is HMAC eenvoudiger en voldoende. Voor doorlopende sessietokens of API-referenties is een JWT vaak flexibeler.

Privacy: onderteken en verifieer volledig in uw browser

De HMAC- en hash-tools van TextArray draaien volledig in uw browser. Er wordt geen bericht, geheim of handtekening naar een server geüpload. Er is geen account vereist en de tools werken offline nadat de pagina is geladen. U kunt veilig webhook-payloads en API-sleutels plakken om handtekeningen te testen en fouten op te sporen zonder gegevens bloot te stellen aan derden of een logboekservice. Dit is vooral waardevol als u tijdens de ontwikkeling met gevoelige API-sleutels of klantgegevens werkt.

Aan de slag

Begin met het begrijpen van hashing: gebruik de hash-generator om te zien hoe dezelfde invoer altijd dezelfde SHA-256-uitvoer produceert. Ga dan naar HMAC-generatie om te zien hoe een geheime sleutel de uitvoer verandert. Probeer de sleutel of het bericht een beetje te veranderen; de HMAC draait volledig om, in tegenstelling tot een naïeve controlesom. Zodra u de werking begrijpt, kunt u deze toepassen op uw webhookverificatielogica. Voor gevoelige ladingen zoals gecodeerde tekst of gedecodeerde tokens, koppel ze altijd aan door HMAC ondertekende verzoeken om de integriteit en herkomst te garanderen.