Share via


Webhook-eseménykézbesítés

A webhookok egyike annak a számos módszernek, ahányszor az Azure Event Gridből fogadhatja az eseményeket. Ha egy új esemény készen áll, az Event Grid szolgáltatás EGY HTTP-kérést küld a konfigurált végpontnak a kérelem törzsében található eseményinformációkkal.

Sok más webhookot támogató szolgáltatáshoz hasonlóan az Event Grid is megköveteli, hogy igazolja a Webhook-végpont tulajdonjogát, mielőtt megkezdené az események kézbesítését az adott végpontra. Ez a követelmény megakadályozza, hogy egy rosszindulatú felhasználó eseményekkel elárasztsa a végpontot.

Végpont érvényesítése Event Grid-eseményekkel

Ha a következő három Azure-szolgáltatás bármelyikét használja, az Azure-infrastruktúra automatikusan kezeli ezt az ellenőrzést:

  • Azure Logic Apps és Event Grid Csatlakozás or
  • Azure Automation webhookon keresztül
  • Azure Functions az Event Grid-eseményindítóval

Ha bármilyen más típusú végpontot , például HTTP-eseményindító-alapú Azure-függvényt használ, a végpontkódnak részt kell vennie egy ellenőrzési kézfogásban az Event Grid használatával. Az Event Grid két módon támogatja az előfizetés érvényesítését.

  • Szinkron kézfogás: Az esemény-előfizetés létrehozásakor az Event Grid egy előfizetés-érvényesítési eseményt küld a végpontnak. Az esemény sémája hasonló minden más Event Grid-eseményhez. Az esemény adatrésze tartalmaz egy tulajdonságot validationCode . Az alkalmazás ellenőrzi, hogy az érvényesítési kérelem egy várt esemény-előfizetéshez tartozik-e, és szinkron módon adja vissza az érvényesítési kódot a válaszban. Ez a kézfogási mechanizmus minden Event Grid-verzióban támogatott.

  • Aszinkron kézfogás: Bizonyos esetekben a válasz nem adhatja vissza validationCode szinkronban. Ha például külső szolgáltatást (például Zapier vagy IFTTT-t) használ, nem tud programozott módon válaszolni az érvényesítési kóddal.

    Az Event Grid támogatja a manuális ellenőrzési kézfogást. Ha olyan SDK-val vagy eszközzel hoz létre esemény-előfizetést, amely az API 2018-05-01-preview vagy újabb verzióját használja, az Event Grid egy tulajdonságot validationUrl küld az előfizetés-érvényesítési esemény adatrészében. A kézfogás elvégzéséhez keresse meg ezt az URL-címet az eseményadatokban, és küldjön egy GET kérést. HASZNÁLHAT REST-ügyfelet vagy webböngészőt.

    A megadott URL-cím 10 percig érvényes. Ez idő alatt az esemény-előfizetés kiépítési állapota .AwaitingManualAction Ha 10 percen belül nem hajtja végre a manuális ellenőrzést, a kiépítés állapota a következőre Failedvan állítva: . A manuális érvényesítés megkezdése előtt újra létre kell hoznia az esemény-előfizetést.

    Ez a hitelesítési mechanizmus azt is megköveteli, hogy a webhook végpontja egy 200-ból álló HTTP-állapotkódot adjon vissza, hogy tudja, hogy az érvényesítési esemény POST-kódja el lett fogadva, mielőtt manuális érvényesítési módban helyezhető volna el. Más szóval, ha a végpont 200-et ad vissza, de nem ad vissza szinkron módon érvényesítési választ, a mód átáll a manuális érvényesítési módra. Ha 10 percen belül megjelenik a GET az érvényesítési URL-címen, az érvényesítési kézfogás sikeresnek minősül.

Feljegyzés

Az önaláírt tanúsítványok érvényesítése nem támogatott. Ehelyett használjon egy kereskedelmi hitelesítésszolgáltatótól (CA) származó aláírt tanúsítványt.

Érvényesítési adatok

  • Az esemény-előfizetés létrehozása/frissítésekor az Event Grid egy előfizetés-érvényesítési eseményt küld a célvégpontnak.
  • Az esemény fejlécértéket aeg-event-type: SubscriptionValidationtartalmaz.
  • Az esemény törzse ugyanazzal a sémával rendelkezik, mint a többi Event Grid-esemény.
  • Az eventType esemény tulajdonsága.Microsoft.EventGrid.SubscriptionValidationEvent
  • Az data esemény tulajdonsága tartalmaz egy validationCode véletlenszerűen generált sztringet tartalmazó tulajdonságot. Például: validationCode: acb13….
  • Az eseményadatok olyan tulajdonságot is tartalmaznak, validationUrl amelynek URL-címe manuálisan érvényesíti az előfizetést.
  • A tömb csak az érvényesítési eseményt tartalmazza. A többi eseményt külön kérésben küldi el a rendszer, miután visszakérte az érvényesítési kódot.
  • Az EventGrid adatsík SDK-jai az előfizetés-érvényesítési eseményadatoknak és az előfizetés-érvényesítési válasznak megfelelő osztályokkal rendelkeznek.

A SubscriptionValidationEvent példa az alábbi példában látható:

[
  {
    "id": "2d1781af-3a4c-4d7c-bd0c-e34b19da4e66",
    "topic": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "subject": "",
    "data": {
      "validationCode": "512d38b6-c7b8-40c8-89fe-f46f9e9622b6",
      "validationUrl": "https://rp-eastus2.eventgrid.azure.net:553/eventsubscriptions/myeventsub/validate?id=0000000000-0000-0000-0000-00000000000000&t=2022-10-28T04:23:35.1981776Z&apiVersion=2018-05-01-preview&token=1A1A1A1A"
    },
    "eventType": "Microsoft.EventGrid.SubscriptionValidationEvent",
    "eventTime": "2022-10-28T04:23:35.1981776Z",
    "metadataVersion": "1",
    "dataVersion": "1"
  }
]

A végpont tulajdonjogának igazolásához adja vissza a tulajdonság érvényesítési validationResponse kódját az alábbi példában látható módon:

{
  "validationResponse": "512d38b6-c7b8-40c8-89fe-f46f9e9622b6"
}

Kövesse az alábbi lépések egyikét:

  • EGY HTTP 200 OK válaszállapot-kódot kell visszaadnia. A HTTP 202 Accepted nem ismerhető fel érvényes Event Grid-előfizetés-érvényesítési válaszként. A HTTP-kérésnek 30 másodpercen belül be kell fejeződnie. Ha a művelet nem fejeződik be 30 másodpercen belül, akkor a művelet megszakad, és 5 másodperc után újra meg lesz adva. Ha az összes kísérlet sikertelen, akkor a rendszer ellenőrzési kézfogási hibaként kezeli.

    Az a tény, hogy az alkalmazás felkészült az érvényesítési kód kezelésére és visszaküldésére, azt jelzi, hogy létrehozta az esemény-előfizetést, és várhatóan megkapja az eseményt. Képzelje el, hogy a kézfogás ellenőrzése nem támogatott, és a hackerek megismerik az alkalmazás URL-címét. A támadó létrehozhat egy témakört és egy esemény-előfizetést az alkalmazás URL-címével, és számos esemény küldésével elindíthat DoS-támadást az alkalmazás számára. A kézfogás ellenőrzése megakadályozza, hogy ez megtörténjen.

    Tegyük fel, hogy már implementálta az ellenőrzést az alkalmazásban, mert saját esemény-előfizetéseket hozott létre. Még akkor is, ha egy hacker létrehoz egy esemény-előfizetést az alkalmazás URL-címével, az érvényesítési kérelem eseményének helyes megvalósítása ellenőrzi a aeg-subscription-name kérés fejlécét, hogy megállapítsa, hogy az ön által felismert esemény-előfizetésről van-e szó.

    A megfelelő kézfogás implementációja után is egy hacker eláraszthatja az alkalmazást (már érvényesítette az esemény-előfizetést) egy olyan kérés replikálásával, amely úgy tűnik, hogy az Event Gridből érkezik. Ennek megakadályozása érdekében a webhookot Microsoft Entra-hitelesítéssel kell biztonságossá tenni. További információ: Események továbbítása a Microsoft Entra által védett végpontokra.

  • Vagy manuálisan is érvényesítheti az előfizetést egy GET kérés elküldésével az érvényesítési URL-címre. Az esemény-előfizetés függőben lévő állapotban marad az ellenőrzésig. Az érvényesítési URL-cím az 553-as portot használja. Ha a tűzfalszabályok blokkolják az 553-at, frissítenie kell a szabályokat a sikeres manuális kézfogáshoz.

    Az előfizetés-érvényesítési esemény érvényesítésekor, ha azt állapítja meg, hogy nem olyan esemény-előfizetésről van szó, amelyre eseményeket vár, akkor nem adna vissza 200 választ, vagy egyáltalán nem adna vissza választ. Ezért az ellenőrzés meghiúsul.

Az előfizetés-érvényesítési kézfogás kezelésére példaként tekintse meg a C#- mintát.

Végpont-ellenőrzés a CloudEvents 1.0-s verzióval

A CloudEvents 1.0-s verzió saját visszaélésvédelmi szemantikáját implementálja a HTTP OPTIONS metódussal. További információk itt. Amikor a CloudEvents sémát használja a kimenethez, az Event Grid az Event Grid érvényesítési eseménymechanizmus helyett a CloudEvents v1.0 visszaélés elleni védelmet használja.

Eseményséma kompatibilitása

Amikor létrehoz egy témakört, egy bejövő eseményséma lesz definiálva. Az előfizetés létrehozásakor pedig egy kimenő eseményséma lesz definiálva. Az alábbi táblázat az előfizetés létrehozásakor engedélyezett kompatibilitást mutatja be.

Bejövő eseményséma Kimenő eseményséma Támogatott
Event Grid-séma Event Grid-séma Igen
Cloud Events v1.0 séma Igen
Egyéni bemeneti séma Nem
Cloud Events v1.0 séma Event Grid-séma Nem
Cloud Events v1.0 séma Igen
Egyéni bemeneti séma Nem
Egyéni bemeneti séma Event Grid-séma Igen
Cloud Events v1.0 séma Igen
Egyéni bemeneti séma Igen

Következő lépések

Az alábbi cikkből megtudhatja, hogyan háríthatja el az esemény-előfizetések érvényesítési hibáit: Az esemény-előfizetések érvényesítésének hibaelhárítása.