Belgelere geç
C#

Webhook'ları doğrulama

Bir teslimatın söylediklerine güvenmeden önce imzasını doğrulayın.

Bir teslimatı doğrulama

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(), üstbilginin zaman damgası ve gövde üzerindeki HMAC değerini sabit zamanda denetler ve olayı bir JsonObject olarak döndürür. İkinci argüman X-OpenEmail-Signature üstbilgisinin değeridir, diğer aşırı yüklemeler ise istek üstbilgilerinin kendisini alır. Gizli anahtar, client.Webhooks.CreateAsync() yönteminin döndürdüğü anahtardır.

Ham gövdeyi, tam geldiği haliyle geçirin. Ayrıştırılıp yeniden kodlanmış bir gövde artık imzasıyla eşleşmez.

Eski teslimatlar

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}");}

Beş dakikadan eski bir teslimat reddedilir, böylece ele geçirilmiş bir istek daha sonra yeniden oynatılamaz. toleranceSeconds: bu beş dakikayı değiştirir, sıfır ise her yaştaki teslimatı kabul eder.

  • Eksik ya da hatalı biçimli bir üstbilgi, eşleşmeyen bir imza ve fazla eski bir teslimat, hepsi OpenEmailWebhookException fırlatır.
  • Bir gizli anahtar döndürüldükten sonra bir teslimat birden fazla imza taşıyabilir ve eşleşen herhangi biri yeterlidir.
  • Hızlıca bir 2xx durumuyla yanıt verin. Başka bir yanıt alan teslimat daha sonra yeniden denenir.