ASP.NET receptores WebHooks

O recebimento de WebHooks depende de quem é o remetente. Às vezes, há etapas adicionais registrando um WebHook verificando se o assinante está realmente escutando. Alguns WebHooks fornecem um modelo push-to-pull em que a solicitação HTTP POST contém apenas uma referência às informações de evento que devem ser recuperadas independentemente. Geralmente, o modelo de segurança varia bastante.

A finalidade do Microsoft ASP.NET WebHooks é tornar mais simples e consistente conectar sua API sem gastar muito tempo descobrindo como lidar com qualquer variante específica de WebHooks.

Um receptor WebHook é responsável por aceitar e verificar webhooks de um remetente específico. Um receptor WebHook pode dar suporte a qualquer número de WebHooks, cada um com sua própria configuração. Por exemplo, o receptor Do WebHook do GitHub pode aceitar WebHooks de qualquer número de repositórios do GitHub.

URIs do Receptor do WebHook

Ao instalar o Microsoft ASP.NET WebHooks, você obtém um controlador WebHook geral que aceita solicitações de WebHook de um número aberto de serviços. Quando uma solicitação chega, ela escolhe o receptor apropriado que você instalou para lidar com um remetente WebHook específico.

O URI desse controlador é o URI do WebHook que você registra com o serviço e é do formulário:

https://<host>/api/webhooks/incoming/<receiver>/{id}

Por motivos de segurança, muitos receptores WebHook exigem que o URI seja um URI https e, em alguns casos, ele também deve conter um parâmetro de consulta adicional que é usado para impor que somente a parte pretendida possa enviar WebHooks para o URI acima.

O <receiver> componente é o nome do receptor, por exemplo github , ou slack.

O {id} é um identificador opcional que pode ser usado para identificar uma configuração específica do receptor WebHook. Isso pode ser usado para registrar N WebHooks com um receptor específico. Por exemplo, os três URIs a seguir podem ser usados para se registrar em três WebHooks independentes:

https://<host>/api/webhooks/incoming/github
https://<host>/api/webhooks/incoming/github/12345
https://<host>/api/webhooks/incoming/github/54321

Instalando um receptor WebHook

Para receber WebHooks usando o Microsoft ASP.NET WebHooks, primeiro instale o pacote Nuget para o provedor webHook ou provedores dos quais deseja receber WebHooks. Os pacotes Nuget são denominados Microsoft.AspNet.WebHooks.Receivers.* em que a última parte indica o serviço com suporte. Por exemplo

Microsoft.AspNet.WebHooks.Receivers.GitHub fornece suporte para receber WebHooks do GitHub e Microsoft.AspNet.WebHooks.Receivers.Custom fornece suporte para receber WebHooks gerados por webHooks ASP.NET.

Pronto para uso, você pode encontrar suporte para Dropbox, GitHub, MailChimp, PayPal, Pusher, Salesforce, Slack, Stripe, Trello e WordPress, mas é possível dar suporte a qualquer número de outros provedores.

Configurando um receptor webhook

Os receptores WebHook são configurados por meio da interface IWebHookReceiverConfig e implementações específicas dessa interface podem ser registradas usando qualquer modelo de injeção de dependência. A implementação padrão usa configurações de aplicativo que podem ser definidas no arquivo Web.config ou, se estiver usando o Azure Aplicativos Web, podem ser definidas por meio do Portal do Azure.

Configurações de Azure App

O formato das chaves de Configuração do Aplicativo é o seguinte:

MS_WebHookReceiverSecret_<receiver>

O valor é uma lista separada por vírgulas de valores que correspondem aos valores {id} para os quais os WebHooks foram registrados, por exemplo:

MS_WebHookReceiverSecret_GitHub = <secret1>, 12345=<secret2>, 54321=<secret3>

Inicializando um receptor WebHook

Os receptores webhook são inicializados registrando-os, normalmente na classe estática WebApiConfig , por exemplo:

namespace WebHookReceivers
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services

            // Web API routes
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

            // Load receivers
            config.InitializeReceiveGitHubWebHooks();
        }
    }
}