Når du opretter et endpoint til en udgående webhook, genererer Lumant en signeringshemmelighed til endpointet.
Denne hemmelighed bruges til at signere hver webhook anmodning, så din applikation kan bekræfte, at anmodningen kommer fra Lumant, og at indholdet ikke er blevet ændret undervejs.
I denne guide viser vi dig, hvordan du autentificerer udgående webhooks ved hjælp af headeren X Lumant Signature.
Kopiér din signeringshemmelighed
Når du opretter et webhook endpoint, viser Lumant en signeringshemmelighed.
Kopiér hemmeligheden med det samme, og opbevar den et sikkert sted.
Signeringshemmeligheden vises kun én gang.
Eksempel:
lmsec_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Del aldrig denne hemmelighed offentligt, og inkluder den aldrig i frontend kode.
Sådan fungerer webhook signaturer
Lumant signerer hver webhook anmodning ved hjælp af endpointets signeringshemmelighed.
Signaturen sendes i headeren X Lumant Signature.
Headerens værdi har følgende format:
sha256={signature}Præfikset sha256= fortæller din applikation, hvilken signeringsalgoritme der er blevet anvendt.
Din applikation skal bruge den rå request body og signeringshemmeligheden til at beregne den forventede signatur. Hvis den beregnede signatur matcher signaturen i headeren, kan webhook anmodningen betragtes som gyldig.
Verificér signaturen
For at verificere en webhook anmodning skal din server:
Læse den rå request body.
Hente headeren X Lumant Signature.
Fjerne præfikset
sha256=.Oprette en HMAC SHA256 signatur ved hjælp af signeringshemmeligheden.
Sammenligne den modtagne signatur med den beregnede signatur.
Brug altid en timing safe sammenligning, når signaturerne sammenlignes.
AI prompt til implementering
Integrate Lumant outbound webhooks into this project using the existing framework and coding style.
Create a secure webhook endpoint that:
1. Accepts POST requests.
2. Reads the raw request body.
3. Verifies the `X-Lumant-Signature` header using the provided Lumant signing secret.
4. Uses HMAC SHA256 to generate the expected signature.
5. Expects the header format `sha256={signature}`.
6. Uses a timing safe comparison to verify the signature.
7. Rejects invalid requests with HTTP 401.
8. Parses the JSON payload only after the signature has been verified.
9. Returns HTTP 200 after successful processing.
Write complete production ready code with appropriate error handling and comments where necessary.
JavaScript eksempel
Dette eksempel viser, hvordan du verificerer en Lumant webhook signatur med almindelig JavaScript og Node.js.
import crypto from "crypto";
export const verifyLumantWebhook = (rawBody: Buffer | string, signatureHeader: string | undefined, signingSecret: string): boolean => {
if (!signatureHeader) {
return false;
}
const prefix = "sha256=";
if (!signatureHeader.startsWith(prefix)) {
return false;
}
const receivedSignature = signatureHeader.slice(prefix.length);
const expectedSignature = crypto
.createHmac("sha256", signingSecret)
.update(rawBody)
.digest("hex");
const receivedBuffer = Buffer.from(receivedSignature, "hex");
const expectedBuffer = Buffer.from(expectedSignature, "hex");
if (receivedBuffer.length !== expectedBuffer.length) {
return false;
}
return crypto.timingSafeEqual(receivedBuffer, expectedBuffer);
};
Vigtige bemærkninger
Brug altid den rå request body, når den forventede signatur beregnes.
Opbevar signeringshemmeligheden sikkert, for eksempel som en miljøvariabel.
Del aldrig signeringshemmeligheden i frontend kode, offentlige repositories, logfiler eller klientapplikationer.
Brug en timing safe sammenligning i stedet for at sammenligne signaturer med ===.
Hvis du mister signeringshemmeligheden, skal du oprette et nyt webhook endpoint eller rotere hemmeligheden, hvis denne mulighed er tilgængelig.
