Aller à la documentation
C#

Vérifier les webhooks

Vérifiez la signature d'une livraison avant de vous fier à ce qu'elle dit.

Vérifier une livraison

Program.cs
using OpenEmail; var builder = WebApplication.CreateBuilder(args);var app = builder.Build();var secret = builder.Configuration["OPENEMAIL_WEBHOOK_SECRET"] ?? string.Empty; app.MapPost("/webhooks/openemail", async (HttpRequest request) =>{    using var reader = new StreamReader(request.Body);    var payload = await reader.ReadToEndAsync();     try    {        var delivery = OpenEmailClient.VerifyWebhookSignature(payload, request.Headers["X-OpenEmail-Signature"], secret);         app.Logger.LogInformation("{Type} {Id}", (string?)delivery["type"], (string?)delivery["id"]);         return Results.NoContent();    }    catch (OpenEmailWebhookException)    {        return Results.BadRequest();    }}); app.Run();

OpenEmailClient.VerifyWebhookSignature() vérifie le HMAC de l'en-tête sur l'horodatage et le corps en temps constant, et renvoie l'événement sous forme de JsonObject. Le deuxième argument est la valeur de l'en-tête X-OpenEmail-Signature, et d'autres surcharges prennent les en-têtes de la requête eux-mêmes. Le secret est celui que client.Webhooks.CreateAsync() a renvoyé.

Passez le corps brut, exactement tel qu'il est arrivé. Un corps analysé puis réencodé ne correspond plus à sa signature.

Livraisons anciennes

tolerance.cs
var payload = """{"id":"evt_1","type":"email.received"}"""; try{    OpenEmailClient.VerifyWebhookSignature(payload, "t=1767225600,v1=5f2d", "whsec_example", toleranceSeconds: 60);}catch (OpenEmailWebhookException error){    Console.WriteLine($"refused: {error.Message}");}

Une livraison de plus de cinq minutes est refusée : une requête interceptée ne peut donc pas être rejouée plus tard. toleranceSeconds: change ces cinq minutes, et zéro accepte une livraison de n'importe quel âge.

  • Un en-tête absent ou mal formé, une signature qui ne correspond pas et une livraison trop ancienne lèvent tous OpenEmailWebhookException.
  • Après la rotation d'un secret, une livraison peut porter plusieurs signatures, et il suffit que l'une d'elles corresponde.
  • Répondez vite avec un statut 2xx. Une livraison qui reçoit une autre réponse est retentée plus tard.