Solicitações e respostas de webhook [descontinuado]
Nesta página
Importante
Suspensão de serviços de terceiros e notificações push
Os serviços de terceiros e as notificações por push no App Services foram preteridos em favor da criação de pontos de extremidade HTTP que usam dependências externas em funções.
Webhooks foram renomeados e agora são chamados de pontos de conexão HTTPS sem nenhuma alteração em seu comportamento. Recomendamos migrar webhooks existentes.
Os serviços existentes continuarão a funcionar até de setembro 30 de2025.
Como os serviços de terceiros e as notificações por push agora estão obsoletos, eles foram removidos por padrão da UI do App Services. Para gerenciar um serviço de terceiros ou uma notificação por push existente, adicione as configurações de volta à UI fazendo o seguinte:
Na navegação à esquerda, na seção Manage, clique em App Settings.
Ative a chave de alternância ao lado de Temporarily Re-Enable 3rd Party Services e salve as alterações.
Visão geral
Dependendo do serviço, os webhooks de entrada oferecem várias maneiras de validar solicitações e personalizar a resposta que o Atlas App Services envia de volta para o serviço externo.
Métodos de validação de solicitação
Para validar se uma solicitação de webhook vem de uma fonte confiável, alguns serviços externos exigem que as solicitações recebidas incorporem uma string secreta em uma das várias maneiras prescritas. Outros serviços, como o HTTP Service, permitem que você exija opcionalmente a validação da solicitação.
Existem dois tipos de Request Validation para webhooks: Verificação da assinatura da carga útil e Segredo como parâmetro de query.
HTTP/1.1 ou superior é necessário ao fazer solicitações.
Observação
Para ter segurança máxima, gere programaticamente a secret
string usando um pacote seguro, como o módulo de segredos do Python. Certifique-se de não publicar o segredo nem incluí-lo em seu sistema de controle de versão.
Verificação da assinatura do payload
A opção de validação de solicitação Verify Payload Signature requer que as solicitações recebidas incluam um hashHMAC SHA-256 codificado hexadecimal gerado a partir do corpo da solicitação e uma string secret
no cabeçalho X-Hook-Signature
.
Exemplo
Considere o seguinte corpo de solicitação de webhook e segredo:
const body = { "message":"MESSAGE" } const secret = 12345
A seguinte Função de Realm gera o hash para este body
e secret
:
// Generate an HMAC request signature exports = function(secret, body) { // secret = the secret validation string // body = the webhook request body return utils.crypto.hmac(EJSON.stringify(body), secret, "sha256", "hex"); } // Returns: "828ee180512eaf8a6229eda7eea72323f68e9c0f0093b11a578b0544c5777862"
O valor de hash deve ser atribuído ao cabeçalho de solicitação HTTP X-Hook-Signature
em cada solicitação:
X-Hook-Signature:sha256=<hex-encoded-hash>
Para testar se a solicitação foi assinada corretamente, poderíamos executar o seguinte comando curl
:
curl -X POST \ -H "Content-Type: application/json" \ -H "X-Hook-Signature:sha256=828ee180512eaf8a6229eda7eea72323f68e9c0f0093b11a578b0544c5777862" \ -d '{"message":"MESSAGE"}' \ <webhook URL>
Segredo como parâmetro de query
A Require Secret as Query Param opção de validação de solicitação requer que as solicitações recebidas incluam a secret
string especificada como parâmetro de query anexado ao final do URL.
Exemplo
Considere um webhook configurado para usar um valor secret de 12345
. Todas as solicitações devem ser feitas à URL do webhook anexada com o segredo como parâmetro de query:
<webhook URL>?secret=12345
Para testar se as solicitações para essa URL são verificadas corretamente, poderíamos executar o seguinte comando curl
:
curl -H "Content-Type: application/json" \ -d '{ "message": "HELLO" }' \ -X POST '<webhook URL>?secret=12345'
Objeto de resposta do webhook
O App Services passa automaticamente um objeto response
que representa a resposta HTTP do webhook como o segundo argumento para a função do webhook. A tabela a seguir lista os métodos disponíveis para modificar o objeto response
:
Método | argumentos | Descrição | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
setStatusCode(code) | code inteiro | Definir o código de status da resposta HTTP . Exemplo
| |||||||||
setBody(body) | body string ou BSON.Binary | Defina o corpo da resposta HTTP . Se Exemplo
| |||||||||
setHeader(name, value) | name stringvalue string | Defina o cabeçalho da resposta HTTP especificada por Exemplo
| |||||||||
addHeader(name, value) | name stringvalue string | Defina a resposta HTTP cabeçalho especificada por Exemplo
|