Validação de endpoint com esquema CloudEvents

Webhooks são uma das muitas maneiras de receber eventos da Grade de Eventos do Azure. Quando um novo evento está pronto, o serviço de Grade de Eventos POSTA uma solicitação HTTP para o ponto de extremidade configurado com as informações do evento no corpo da solicitação.

Como muitos outros serviços que suportam webhooks, a Grade de Eventos exige que você prove a propriedade do seu ponto de extremidade Webhook antes que ele comece a entregar eventos para esse ponto de extremidade. Esse requisito impede que um usuário mal-intencionado inunde seu ponto de extremidade com eventos.

Validação de endpoint com CloudEvents v1.0

O CloudEvents v1.0 implementa sua própria semântica de proteção contra abuso usando o método HTTP OPTIONS . Quando você usa o esquema CloudEvents para saída, a Grade de Eventos usa a proteção contra abuso do CloudEvents v1.0 no lugar do mecanismo de eventos de validação da Grade de Eventos.

Proteção contra abuso do CloudEvent v1.0

Qualquer sistema que permita o registro e a entrega de notificações para pontos de extremidade HTTP arbitrários pode ser potencialmente abusado de tal forma que alguém maliciosamente ou inadvertidamente registre o endereço de um sistema que não espera tais solicitações e para o qual a parte registradora não está autorizada a realizar tal registro. Em casos extremos, uma infraestrutura de notificação pode ser utilizada abusivamente para lançar ataques de negação de serviço contra um sítio Web arbitrário.

Para proteger o remetente de ser abusado dessa forma, um alvo de entrega legítimo precisa indicar que concorda com as notificações que lhe são entregues.

Chegar ao contrato de entrega é realizado usando o seguinte handshake de validação. O aperto de mão pode ser executado imediatamente no momento do registro ou como um pedido de "comprovação" imediatamente antes de uma entrega.

É importante entender que o handshake não visa estabelecer um contexto de autenticação ou autorização. Serve apenas para proteger o remetente de ser avisado para um push para um destino que não está esperando o tráfego. Embora essa especificação exija o uso de um modelo de autorização, essa exigência não é suficiente para proteger qualquer site arbitrário de tráfego indesejado se esse site não implementar o controle de acesso e, portanto, ignorar o Authorization cabeçalho.

Os alvos de entrega DEVEM suportar o recurso de proteção contra abuso. Se um destino não suportar o recurso, o remetente PODE optar por não enviar para o destino, de todo, ou enviar apenas a uma taxa de solicitação muito baixa.

Pedido de validação

A solicitação de validação usa o método HTTP OPTIONS . A solicitação é direcionada para o URI de destino exato do recurso que está sendo registrado. Com a solicitação de validação, o remetente pede permissão ao alvo para enviar notificações e pode declarar uma taxa de solicitação desejada (solicitações por minuto). O alvo de entrega responderá com uma declaração de permissão e a taxa de solicitação permitida. Aqui estão alguns dos campos de cabeçalho para inclusão na solicitação de validação.

WebHook-Request-Origin

O WebHook-Request-Origin cabeçalho DEVE ser incluído na solicitação de validação e solicita permissão para enviar notificações desse remetente e contém uma expressão DNS (Sistema de Nomes de Domínio) que identifica o sistema de envio, por exemplo eventemitter.example.com. O valor destina-se a identificar sumariamente todas as instâncias do remetente que atuam em nome de um determinado sistema, e não de um host individual.

Após o handshake e se a permissão tiver sido concedida, o remetente DEVE usar o Origin cabeçalho da solicitação para cada solicitação de entrega, com o valor correspondente ao desse cabeçalho.

Exemplo:

WebHook-Request-Origin: eventemitter.example.com

Resposta de validação

Se e somente se o destino de entrega permitir a entrega dos eventos, ele DEVE responder à solicitação incluindo os WebHook-Allowed-Origin cabeçalhos e WebHook-Allowed-Rate . Se o destino de entrega optar por conceder permissão por retorno de chamada, ele retém os cabeçalhos de resposta.

Se o destino de entrega não permitir a entrega dos eventos ou não esperar a entrega de eventos e, no entanto, manipular o método HTTP OPTIONS, a resposta existente não deve ser interpretada como consentimento e, portanto, o handshake não pode depender de códigos de status. Se o destino de entrega não manipular o método HTTP OPTIONS, ele DEVE responder com o código de status HTTP 405, como se OPTIONS não fosse suportado.

A resposta OPTIONS DEVE incluir o Allow cabeçalho indicando o método POST que está sendo permitido. Outros métodos PODEM ser permitidos no recurso, mas sua função está fora do escopo desta especificação.

WebHook-Allowed-Origin

O WebHook-Allowed-Origin cabeçalho DEVE ser devolvido quando o destino de entrega concorda com a entrega da notificação pelo serviço de origem. Seu valor DEVE ser o nome de origem fornecido no WebHook-Request-Origin cabeçalho ou um caractere de asterisco singular ('*'), indicando que o destino de entrega suporta notificações de todas as origens.

WebHook-Allowed-Origin: eventemitter.example.com

Ou

WebHook-Request-Origin: *

Importante

Para obter mais informações sobre a proteção contra abuso, consulte Proteção contra abuso nos Web Hooks HTTP 1.1 para especificações de entrega de eventos.

Consulte o seguinte artigo para saber como solucionar problemas de validações de assinatura de eventos: Solucionar problemas de validações de assinatura de eventos.