ASP.NET receptores WebHooks

Aviso

ASP.NET WebHooks foi preterido e não receberá mais atualizações ou correções de segurança.

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 de forma independente. 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 para descobrir 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 GitHub WebHook pode aceitar WebHooks de qualquer número de repositórios de 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 tem a forma:

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 pode 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 do 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 registrar para 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 do WebHook

Para receber WebHooks usando o Microsoft ASP.NET WebHooks, primeiro instale o pacote Nuget para o provedor de 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 o recebimento de WebHooks de GitHub e Microsoft.AspNet.WebHooks.Receivers.Custom fornece suporte para o recebimento de 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 do 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 estiverem usando Azure Web Apps, podem ser definidas por meio do Azure Portal.

Configurações do Aplicativo do Azure

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 webHooks foram registrados, por exemplo:

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

Inicializando um receptor do 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();
        }
    }
}