Receptores de WebHooks de ASP.NET

Advertencia

ASP.NET WebHooks está en desuso y ya no recibirá actualizaciones ni correcciones de seguridad.

Recibir webHooks depende de quién sea el remitente. A veces, hay pasos adicionales al registrar un webhook que verifican si el suscriptor realmente está escuchando. Algunos WebHooks proporcionan un modelo de push a pull donde la solicitud HTTP POST solo contiene una referencia a la información del evento, que deberá recuperarse de forma independiente. A menudo, el modelo de seguridad varía bastante.

El propósito de Microsoft ASP.NET WebHooks es que sea más sencillo y coherente conectar la API sin dedicar mucho tiempo a averiguar cómo controlar cualquier variante concreta de WebHooks.

Un receptor de WebHook es responsable de aceptar y comprobar webHooks de un remitente determinado. Un receptor de WebHook puede admitir cualquier número de webHooks, cada uno con su propia configuración. Por ejemplo, el receptor de GitHub WebHook puede aceptar webHooks de cualquier número de repositorios de GitHub.

URI del receptor de webHook

Al instalar Microsoft ASP.NET WebHooks, obtiene un controlador general de WebHook que acepta solicitudes de WebHook de una cantidad indefinida de servicios. Cuando llega una solicitud, elige el receptor adecuado que ha instalado para controlar un remitente de WebHook determinado.

El URI de este controlador es el URI de WebHook que usted registra con el servicio y tiene el formato:

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

Por motivos de seguridad, muchos receptores de webHook requieren que el URI sea un URI https y, en algunos casos, también debe contener un parámetro de consulta adicional que se usa para aplicar que solo la entidad deseada puede enviar webHooks al URI anterior.

El <receiver> componente es el nombre del receptor, por ejemplo github o slack.

{id} es un identificador opcional que se puede usar para identificar una configuración de receptor de WebHook determinada. Esto se puede usar para registrar N WebHooks con un receptor determinado. Por ejemplo, los tres URI siguientes se pueden usar para registrarse para tres webHooks independientes:

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

Instalación de un receptor de WebHook

Para recibir webHooks mediante Microsoft ASP.NET WebHooks, primero debe instalar el paquete Nuget para el proveedor o proveedores de WebHook desde los que desea recibir webHooks. Los paquetes Nuget se denominan Microsoft.AspNet.WebHooks.Receivers.* donde la última parte indica el servicio admitido. Por ejemplo,

Microsoft.AspNet.WebHooks.Receivers. GitHub proporciona compatibilidad para recibir webHooks de GitHub y Microsoft.AspNet.WebHooks.Receivers.Custom proporciona compatibilidad para recibir webHooks generados por ASP.NET WebHooks.

Puede encontrar soporte técnico para Dropbox, GitHub, MailChimp, PayPal, Pusher, Salesforce, Slack, Stripe, Trello y WordPress, pero es posible admitir cualquier número de otros proveedores.

Configuración de un receptor de webHook

Los receptores de webHook se configuran a través de la interfaz IWebHookReceiverConfig y las implementaciones concretas de esa interfaz se pueden registrar mediante cualquier modelo de inserción de dependencias. La implementación predeterminada usa la configuración de la aplicación que se puede establecer en el archivo de Web.config o, si usa Azure Web Apps, se puede establecer a través del Azure Portal.

Configuración de la aplicación de Azure

El formato de las claves de configuración de la aplicación es el siguiente:

MS_WebHookReceiverSecret_<receiver>

El valor es una lista separada por comas de valores que coinciden con los valores {id} para los que se han registrado webHooks, por ejemplo:

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

Inicialización de un receptor de WebHook

Los receptores de webHook se inicializan al registrarlos, normalmente en la clase estática WebApiConfig , por ejemplo:

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();
        }
    }
}