Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Quando crei un abbonamento a eventi Event Grid per un endpoint webhook, Event Grid deve confermare di possedere l'endpoint prima che consegni gli eventi. Se quella stretta di mano di validazione non si completa, la creazione dell'abbonamento fallisce. Questo articolo ti aiuta a capire perché la stretta di mano fallisce e come risolverla.
Symptoms
Quando crei un abbonamento a un evento, vedi un messaggio di errore simile al seguente testo:
The attempt to validate the provided endpoint https://your-endpoint-here failed. For more details, visit https://aka.ms/esvalidation
L'errore indica che Event Grid non è riuscito a completare la stretta di mano di validazione con il tuo endpoint webhook, quindi Event Grid non crea l'abbonamento.
Cause
Event Grid richiede di dimostrare la proprietà di un endpoint webhook prima che inizi a consegnare eventi. Questo requisito impedisce a un utente malintenzionato di inondare un endpoint di eventi. L'errore di validazione appare quando la stretta di mano tra Event Grid e il tuo endpoint non ha successo. Le cause più comuni includono:
- Il tuo endpoint non rimanda il codice di convalida per l’handshake sincrono oppure non restituisce
200 OKper l’handshake asincrono (manuale). - Un firewall, gateway applicazione di Azure o un firewall per applicazioni web (WAF) davanti al tuo endpoint bloccano la richiesta di validazione e restituiscono
403 (Forbidden). - Il tuo endpoint utilizza lo schema CloudEvents v1.0 ma non risponde alla richiesta di validazione HTTP OPTIONS .
- Il tuo endpoint utilizza un certificato autofirmato, che Event Grid non supporta per la validazione.
Per una descrizione completa della handshake di validazione, vedi Validazione degli endpoint con schema degli eventi Event Grid e validazione degli endpoint utilizzando lo schema CloudEvents.
Soluzione 1: Test dell'handshake di convalida per una sottoscrizione con schema Event Grid
Invia un esempio di SubscriptionValidationEvent al tuo webhook e conferma la risposta:
- Invia una richiesta HTTP POST al tuo URL webhook con un corpo di richiesta di esempio
SubscriptionValidationEventusando curl o uno strumento simile. - Se il tuo webhook implementa l'handshake sincrono, verifica che restituisca
validationCodenella risposta. Devi restituire unHTTP 200 OKcodice di stato. Event Grid non riconosceHTTP 202 Acceptedcome risposta valida e la richiesta deve essere completata entro 30 secondi. - Se il tuo webhook implementa la stretta di mano asincrona (manuale), verifica che il tuo endpoint restituisca
200 OK. Poi completa la stretta di mano inviando una richiesta GET avalidationUrlnei dati dell'evento entro 10 minuti. L'URL di validazione usa la porta 553, quindi aggiorna le regole del firewall se quella porta è bloccata.
Ecco un esempio SubscriptionValidationEvent di payload JSON che puoi inviare:
[
{
"id": "aaaa0000-bb11-2222-33cc-444444dddddd",
"topic": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"subject": "",
"data": {
"validationCode": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"
},
"eventType": "Microsoft.EventGrid.SubscriptionValidationEvent",
"eventTime": "2018-01-25T22:12:19.4556811Z",
"metadataVersion": "1",
"dataVersion": "1"
}
]
Ecco la risposta attesa e positiva:
{
"validationResponse": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"
}
Ecco il comando curl equivalente per convalidare un abbonamento webhook che utilizza lo schema degli eventi Event Grid:
curl -X POST -d '[{"id": "aaaa0000-bb11-2222-33cc-444444dddddd","topic": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx","subject": "","data": {"validationCode": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"},"eventType": "Microsoft.EventGrid.SubscriptionValidationEvent","eventTime": "2018-01-25T22:12:19.4556811Z", "metadataVersion": "1","dataVersion": "1"}]' -H 'Content-Type: application/json' https://{your-webhook-url.com}
Per saper di più, consulta Validazione degli endpoint con schema degli eventi della Griglia Eventi.
Soluzione 2: Rimuovere le regole firewall o WAF che bloccano la richiesta di validazione
Se il tuo webhook restituisce 403 (Forbidden), verifica se è protetto da gateway applicazione di Azure o da un web application firewall. Se lo è, disabilita le seguenti regole del firewall e rifai il HTTP POST:
- 920300 (Richiesta senza intestazione Accept)
- 942430 (Rilevamento di anomalie di caratteri SQL limitati (args): numero di caratteri speciali superato (12))
- 920230 (Rilevata codifica multipla URL)
- 942130 (attacco di iniezione SQL: tautologia SQL rilevata)
- 931130 (Possibile attacco di inclusione remota di file (RFI): riferimento o link fuori dominio)
Soluzione 3: Valida un abbonamento allo schema CloudEvents
Se il tuo abbonamento utilizza lo schema CloudEvents v1.0, Event Grid utilizza la protezione contro gli abusi di CloudEvents invece dell'evento di validazione dell'abbonamento. Il tuo endpoint deve rispondere al metodo HTTP OPTIONS e restituire l'intestazione WebHook-Allowed-Origin. Per saperne di più, consulta Validazione degli endpoint utilizzando lo schema CloudEvents.
Contenuto correlato
Se hai bisogno di ulteriore assistenza, poni la tua domanda nella