12.3 Seguridad
La implementacion de webhooks requiere exponer un endpoint de su sistema a internet, por lo cual es recomendable implementar uno o ambas de las siguientes opciones de seguridad:
Usar Secreto
Es el metodo de seguridad mas sencillo. El valor ingresado aqui sera enviado en todo evento transmitido hacia el webhook en la cabezera http X-Webhook-Secret asi verificando que es una transmision que viene de nuestro sistema.
Usar Endpoint de Autenticacion
Este metodo consiste en proporcionarnos con un endpoint de autenticacion, al cual enviaremos los siguientes parametros segun lo configurado
Usuario del Webhook sera el valor enviado en client_id Contraseña para el Webhook sera el valor enviado en client_secret
El tipo de contenido enviado es de tipo application/x-www-form-urlencoded y se adiciona un parametro de query de tipo ?grant_type=client_credentials. Ejemplo en Go:
type WebhookAuthRequest struct { ClientID string `form:"client_id" json:"clientId"` ClientSecret string `form:"client_secret" json:"clientSecret"`}
Factured espera recibir una respuesta de este endpoint que contenga esta estructura como minimo, con contenido application/json:
type WebhookAuthResponse struct { AcessToken string `json:"access_token"` TokenType string `json:"token_type"` ExpiresIn int32 `json:"expires_in"`}
serializado en json:
{ "access_token": "su-token-aqui", "token_type": "Bearer", "expires_in": 1}
El access_token devuelto sera posteriormente utilizado en toda notificacion enviada en la cabezera Authorization con formato Bearer