Gebeurtenisverzending voor de webhook
Webhooks zijn een van de vele manieren om gebeurtenissen te ontvangen van Azure Event Grid. Wanneer een nieuwe gebeurtenis gereed is, poseert de Event Grid-service een HTTP-aanvraag naar het geconfigureerde eindpunt met de gebeurtenisgegevens in de aanvraagbody.
Net als veel andere services die webhooks ondersteunen, moet u in Event Grid het eigendom van uw Webhook-eindpunt bewijzen voordat het begint met het leveren van gebeurtenissen aan dat eindpunt. Deze vereiste voorkomt dat een kwaadwillende gebruiker uw eindpunt overspoelt met gebeurtenissen.
Eindpuntvalidatie met Event Grid-gebeurtenissen
Wanneer u een van de volgende drie Azure-services gebruikt, verwerkt de Azure-infrastructuur deze validatie automatisch:
- Azure Logic Apps met Event Grid Verbinding maken or
- Azure Automation via webhook
- Azure Functions met Event Grid-trigger
Als u een ander type eindpunt gebruikt, zoals een Op HTTP-trigger gebaseerde Azure-functie, moet uw eindpuntcode deelnemen aan een validatiehanddruk met Event Grid. Event Grid ondersteunt twee manieren om het abonnement te valideren.
Synchrone handshake: Op het moment dat een gebeurtenisabonnement is gemaakt, verzendt Event Grid een abonnementsvalidatiegebeurtenis naar uw eindpunt. Het schema van deze gebeurtenis is vergelijkbaar met andere Event Grid-gebeurtenissen. Het gegevensgedeelte van deze gebeurtenis bevat een
validationCode
eigenschap. Uw toepassing controleert of de validatieaanvraag voor een verwacht gebeurtenisabonnement is en retourneert de validatiecode synchroon in het antwoord. Dit handshake-mechanisme wordt ondersteund in alle Event Grid-versies.Asynchrone handshake: In bepaalde gevallen kunt u het
validationCode
antwoord niet synchroon retourneren. Als u bijvoorbeeld een service van derden (zoalsZapier
of IFTTT) gebruikt, kunt u niet programmatisch reageren met de validatiecode.Event Grid ondersteunt een handmatige validatiehanddruk. Als u een gebeurtenisabonnement maakt met een SDK of hulpprogramma dat gebruikmaakt van API-versie 2018-05-01-preview of hoger, verzendt Event Grid een
validationUrl
eigenschap in het gegevensgedeelte van de abonnementsvalidatiegebeurtenis. Als u de handshake wilt voltooien, zoekt u die URL in de gebeurtenisgegevens en voert u een GET-aanvraag uit. U kunt een REST-client of uw webbrowser gebruiken.De opgegeven URL is 10 minuten geldig. Gedurende die tijd is
AwaitingManualAction
de inrichtingsstatus van het gebeurtenisabonnement. Als u de handmatige validatie niet binnen 10 minuten voltooit, wordt de inrichtingsstatus ingesteld opFailed
. U moet het gebeurtenisabonnement opnieuw maken voordat u de handmatige validatie start.Dit verificatiemechanisme vereist ook dat het webhook-eindpunt een HTTP-statuscode van 200 retourneert, zodat deze weet dat de POST voor de validatiegebeurtenis is geaccepteerd voordat deze in de handmatige validatiemodus kan worden geplaatst. Met andere woorden, als het eindpunt 200 retourneert maar niet synchroon een validatieantwoord retourneert, wordt de modus overgezet naar de handmatige validatiemodus. Als er binnen tien minuten een GET op de validatie-URL is, wordt de validatiehanddruk beschouwd als geslaagd.
Notitie
Het gebruik van zelfondertekende certificaten voor validatie wordt niet ondersteund. Gebruik in plaats daarvan een ondertekend certificaat van een commerciële certificeringsinstantie (CA).
Validatiedetails
- Op het moment van het maken/bijwerken van een gebeurtenisabonnement plaatst Event Grid een gebeurtenis voor abonnementsvalidatie op het doeleindpunt.
- De gebeurtenis bevat een headerwaarde
aeg-event-type: SubscriptionValidation
. - De hoofdtekst van de gebeurtenis heeft hetzelfde schema als andere Event Grid-gebeurtenissen.
- De
eventType
eigenschap van de gebeurtenis isMicrosoft.EventGrid.SubscriptionValidationEvent
. - De
data
eigenschap van de gebeurtenis bevat eenvalidationCode
eigenschap met een willekeurig gegenereerde tekenreeks. Bijvoorbeeld:validationCode: acb13…
. - De gebeurtenisgegevens bevatten ook een
validationUrl
eigenschap met een URL voor het handmatig valideren van het abonnement. - De matrix bevat alleen de validatie-gebeurtenis. Andere gebeurtenissen worden verzonden in een afzonderlijke aanvraag nadat u de validatiecode hebt teruggezet.
- De EventGrid-gegevensvlak-SDK's hebben klassen die overeenkomen met de gebeurtenisgegevens van de abonnementsvalidatie en het antwoord op de abonnementsvalidatie.
Een voorbeeld van SubscriptionValidationEvent wordt weergegeven in het volgende voorbeeld:
[
{
"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"
}
]
Als u het eigendom van het eindpunt wilt bewijzen, herhaalt u de validatiecode in de validationResponse
eigenschap, zoals wordt weergegeven in het volgende voorbeeld:
{
"validationResponse": "512d38b6-c7b8-40c8-89fe-f46f9e9622b6"
}
Voer een van de volgende stappen uit:
U moet een HTTP 200 OK-antwoordstatuscode retourneren. HTTP 202 Geaccepteerd wordt niet herkend als een geldig validatieantwoord voor een Event Grid-abonnement. De HTTP-aanvraag moet binnen 30 seconden worden voltooid. Als de bewerking niet binnen 30 seconden is voltooid, wordt de bewerking geannuleerd en kan deze na 5 seconden opnieuw worden uitgevoerd. Als alle pogingen mislukken, wordt deze behandeld als validatiehanddrukfout.
Het feit dat uw toepassing is voorbereid om de validatiecode te verwerken en te retourneren, geeft aan dat u het gebeurtenisabonnement hebt gemaakt en verwacht dat u de gebeurtenis ontvangt. Stel dat er geen handshakevalidatie wordt ondersteund en dat een hacker uw toepassings-URL weet. De hacker kan een onderwerp en een gebeurtenisabonnement maken met de URL van uw toepassing en beginnen met het uitvoeren van een DoS-aanval naar uw toepassing door veel gebeurtenissen te verzenden. De handshakevalidatie voorkomt dat dit gebeurt.
Stel dat u de validatie al in uw app hebt geïmplementeerd omdat u uw eigen gebeurtenisabonnementen hebt gemaakt. Zelfs als een hacker een gebeurtenisabonnement met uw app-URL maakt, controleert uw juiste implementatie van de validatieaanvraaggebeurtenis de
aeg-subscription-name
header in de aanvraag om na te gaan of het een gebeurtenisabonnement is dat u herkent.Zelfs na die juiste handshake-implementatie kan een hacker uw app overspoelen (het heeft het gebeurtenisabonnement al gevalideerd) door een aanvraag te repliceren die afkomstig lijkt te zijn van Event Grid. Om dat te voorkomen, moet u uw webhook beveiligen met Microsoft Entra-verificatie. Zie Gebeurtenissen leveren aan met Microsoft Entra beveiligde eindpunten voor meer informatie.
U kunt het abonnement ook handmatig valideren door een GET-aanvraag naar de validatie-URL te verzenden. Het gebeurtenisabonnement blijft in behandeling totdat het is gevalideerd. De validatie-URL maakt gebruik van poort 553. Als uw firewallregels poort 553 blokkeren, moet u regels bijwerken voor een geslaagde handmatige handshake.
Als u in uw validatie van de abonnementsvalidatie-gebeurtenis vaststelt dat het geen gebeurtenisabonnement is waarvoor u gebeurtenissen verwacht, retourneert u helemaal geen 200-respons of helemaal geen antwoord. Daarom mislukt de validatie.
Zie een C#-voorbeeld voor een voorbeeld van het verwerken van de handshake van de abonnementsvalidatie.
Eindpuntvalidatie met CloudEvents v1.0
CloudEvents v1.0 implementeert zijn eigen semantiek voor misbruikbeveiliging met behulp van de METHODE HTTP OPTIONS . Hier vindt u meer informatie. Wanneer u het CloudEvents-schema voor uitvoer gebruikt, maakt Event Grid gebruik van cloudevents v1.0 misbruikbeveiliging in plaats van het Event Grid-validatiemechanisme.
Compatibiliteit van gebeurtenisschema's
Wanneer een onderwerp wordt gemaakt, wordt een binnenkomende gebeurtenisschema gedefinieerd. En wanneer een abonnement wordt gemaakt, wordt er een uitgaand gebeurtenisschema gedefinieerd. In de volgende tabel ziet u de compatibiliteit die is toegestaan bij het maken van een abonnement.
Schema voor binnenkomende gebeurtenissen | Schema voor uitgaande gebeurtenissen | Ondersteund |
---|---|---|
Event Grid-schema | Event Grid-schema | Ja |
Cloud events v1.0 schema | Ja | |
Aangepast invoerschema | Nee | |
Cloud events v1.0 schema | Event Grid-schema | Nee |
Cloud events v1.0 schema | Ja | |
Aangepast invoerschema | Nee | |
Aangepast invoerschema | Event Grid-schema | Ja |
Cloud events v1.0 schema | Ja | |
Aangepast invoerschema | Ja |
Volgende stappen
Zie het volgende artikel voor meer informatie over het oplossen van problemen met validaties van gebeurtenisabonnementen: Problemen met validaties van gebeurtenisabonnementen oplossen.
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor