پرش به مستندات
C#

تأیید وب‌هوک‌ها

پیش از اعتماد به آنچه یک تحویل می‌گوید، امضای آن را بررسی کنید.

تأیید یک تحویل

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() مقدار HMAC سرآیند را روی مُهر زمانی و بدنه در زمان ثابت بررسی می‌کند، و رویداد را به‌صورت یک JsonObject برمی‌گرداند. آرگومان دوم مقدار سرآیند X-OpenEmail-Signature است، و سربارگذاری‌های دیگر خودِ سرآیندهای درخواست را می‌گیرند. راز همان است که client.Webhooks.CreateAsync() برگردانده است.

بدنهٔ خام را، دقیقاً همان‌طور که رسیده، بدهید. بدنه‌ای که تجزیه و دوباره رمزگذاری شده دیگر با امضایش مطابقت ندارد.

تحویل‌های قدیمی

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

تحویلی که بیش از پنج دقیقه از آن گذشته رد می‌شود، پس درخواستِ شنودشده را نمی‌توان بعداً بازپخش کرد. toleranceSeconds: آن پنج دقیقه را تغییر می‌دهد، و صفر تحویلی با هر قدمتی را می‌پذیرد.

  • سرآیند ناموجود یا بدشکل، امضایی که مطابقت ندارد و تحویلی که بیش از حد قدیمی است همگی OpenEmailWebhookException پرتاب می‌کنند.
  • پس از چرخاندن یک راز، یک تحویل می‌تواند بیش از یک امضا داشته باشد، و مطابقت هر یک کافی است.
  • سریع با وضعیت 2xx پاسخ دهید. تحویلی که هر پاسخ دیگری بگیرد بعداً دوباره امتحان می‌شود.