Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Quando cria uma subscrição de eventos do Event Grid para um ponto final de webhook, o Event Grid tem de confirmar que o ponto final lhe pertence antes de enviar os eventos. Se esse aperto de mão de validação não for concluído, a criação da subscrição falha. Este artigo ajuda-o a identificar porque é que o aperto de mão falha e como o resolver.
Sintomas
Quando cria uma subscrição de evento, vê uma mensagem de erro semelhante ao texto seguinte:
The attempt to validate the provided endpoint https://your-endpoint-here failed. For more details, visit https://aka.ms/esvalidation
O erro indica que o Event Grid não conseguiu concluir o handshake de validação com o endpoint do webhook, por isso o Event Grid não cria a subscrição.
Cause
O Event Grid exige que prove a propriedade de um endpoint webhook antes de começar a entregar eventos. Este requisito impede que um utilizador malicioso inunde um endpoint com eventos. O erro de validação aparece quando o handshake entre a Event Grid e o teu endpoint não tem sucesso. As causas comuns incluem:
- O seu endpoint não devolve o código de validação no handshake síncrono nem devolve
200 OKno handshake assíncrono (manual). - Um firewall, Gateway de Aplicação do Azure ou firewall de aplicações web (WAF) à frente do seu endpoint bloqueia o pedido de validação e devolve
403 (Forbidden). - O seu endpoint usa o esquema CloudEvents v1.0, mas não responde ao pedido de validação HTTP OPTIONS .
- O seu endpoint usa um certificado auto-assinado, que o Event Grid não suporta para validação.
Para uma descrição completa do handshake de validação, veja Validação de endpoint com esquema de eventos Event Grid e validação de endpoint usando o esquema CloudEvents.
Solução 1: Testar o handshake de validação para uma subscrição de esquema Event Grid
Envie um exemplo de SubscriptionValidationEvent para o seu webhook e confirme a resposta:
- Envie um pedido POST HTTP para o URL do seu webhook com um corpo de pedido de exemplo
SubscriptionValidationEvent, utilizando o curl ou uma ferramenta semelhante. - Se o seu webhook implementar o handshake síncrono, verifique se o seu webhook devolve o
validationCodena resposta. Deve devolver o código de estadoHTTP 200 OK. O Event Grid não reconheceHTTP 202 Acceptedcomo resposta válida, e o pedido deve ser concluído em 30 segundos. - Se o seu webhook implementar o handshake assíncrono (manual), verifique se o seu endpoint retorna
200 OK. Depois, conclua o handshake enviando um pedido GET para ovalidationUrlnos dados do evento no prazo de 10 minutos. A URL de validação usa a porta 553, por isso atualiza as regras do firewall se essa porta estiver bloqueada.
Aqui está um exemplo SubscriptionValidationEvent de carga útil JSON que pode enviar:
[
{
"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"
}
]
Aqui está a resposta bem-sucedida esperada:
{
"validationResponse": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"
}
Aqui está o comando curl equivalente para validar uma subscrição de webhook que utiliza o esquema de eventos 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}
Para saber mais, consulte Validação de endpoint com esquema de eventos da Grade de Eventos.
Solução 2: Remover regras de firewall ou WAF que bloqueiam o pedido de validação
Se o seu webhook devolver 403 (Forbidden), verifique se está por trás de um Gateway de Aplicação do Azure ou de um firewall de aplicações Web. Se for, desative as seguintes regras de firewall e faça novamente o HTTP POST:
- 920300 (Pedido sem um cabeçalho Accept)
- 942430 (Deteção restrita de anomalias de caracteres SQL (args): número de caracteres especiais excedido (12))
- 920230 (Codificação de URL múltipla detetada)
- 942130 (ataque de injeção SQL: tautologia SQL detetada)
- 931130 (Possível ataque remoto de inclusão de ficheiros (RFI): referência ou ligação fora do domínio)
Solução 3: Validar uma subscrição de esquema CloudEvents
Se a sua subscrição usar o esquema CloudEvents v1.0, o Event Grid utiliza proteção contra abusos do CloudEvents em vez do evento de validação da subscrição. O seu endpoint deve responder ao método HTTP OPTIONS e devolver o WebHook-Allowed-Origin cabeçalho. Para saber mais, consulte Validação de endpoint usando o esquema CloudEvents.
Conteúdos relacionados
Se precisares de mais ajuda, faz a tua pergunta na página de Perguntas e Respostas da Microsoft para o Event Grid ou abre um ticket de suporte.