Kalo te dokumentacioni
Java

Verifikoni webhook-ët

Kontrolloni nënshkrimin e një dorëzimi para se t'i besoni asaj që thotë.

Verifikoni një dorëzim

WebhookHandler.java
import com.sun.net.httpserver.HttpExchange;import com.sun.net.httpserver.HttpHandler;import java.io.IOException;import java.nio.charset.StandardCharsets;import java.util.Map;import uk.openemail.OpenEmail;import uk.openemail.exception.WebhookSignatureException; public final class WebhookHandler implements HttpHandler {    @Override    public void handle(HttpExchange exchange) throws IOException {        String rawBody = new String(exchange.getRequestBody().readAllBytes(), StandardCharsets.UTF_8);        String secret = System.getenv("OPENEMAIL_WEBHOOK_SECRET");        int status = 204;         try {            Map<String, Object> event = OpenEmail.verifyWebhookSignature(rawBody, exchange.getRequestHeaders(), secret);             System.out.println(event.get("type") + " " + event.get("id"));        } catch (WebhookSignatureException error) {            status = 400;        }         exchange.sendResponseHeaders(status, -1);        exchange.close();    }}

OpenEmail.verifyWebhookSignature lexon kokën X-OpenEmail-Signature, kontrollon HMAC-un e saj mbi vulën kohore dhe trupin në kohë konstante, dhe e kthen ngjarjen si Map<String, Object>. Sekreti është ai që ktheu client.webhooks().create.

Kokat janë një map me emra në çfarëdo shkrimi dhe me tekst ose një listë tekstesh si vlerë, kështu që exchange.getRequestHeaders() dhe HttpHeaders të Spring-ut përshtaten siç janë. Edhe vetë vlera e kokës funksionon.

Jepni trupin e papërpunuar, pikërisht siç mbërriti. Një trup që është analizuar dhe koduar sërish nuk përputhet më me nënshkrimin e vet.

Dorëzime të vjetra

Tolerance.java
String signature = "t=1767225600,v1=5257a869e7ecebeda32affa62cdca3fa51cad7e77a0e56ff536d0ce8e108d8bd";Map<String, String> headers = Map.of("X-OpenEmail-Signature", signature); try {    OpenEmail.verifyWebhookSignature("{}", headers, System.getenv("OPENEMAIL_WEBHOOK_SECRET"), Duration.ofMinutes(1));} catch (WebhookSignatureException error) {    System.err.println(error.getMessage());}

Një dorëzim më i vjetër se pesë minuta refuzohet, kështu që një kërkesë e kapur nuk mund të riluhet më vonë. Një Duration si argumenti i fundit i ndryshon pesë minutat, dhe Duration.ZERO pranon një dorëzim të çdo moshe.

  • Një kokë që mungon ose është e keqformuar, një nënshkrim që nuk përputhet dhe një dorëzim tepër i vjetër hedhin të gjitha WebhookSignatureException.
  • Pasi një sekret rrotullohet, një dorëzim mund të mbajë më shumë se një nënshkrim, dhe mjafton që njëri të përputhet.
  • Përgjigjuni shpejt me një status 2xx. Një dorëzim që merr çdo përgjigje tjetër riprovohet më vonë.