Menu Docs

Página inicial do DocsServiços Atlas App

Solicitações e respostas de webhook [obsoleto]

Nesta página

  • Visão geral
  • Métodos de validação de solicitação
  • Verificação da assinatura do payload
  • Segredo como parâmetro de query
  • Objeto de resposta do webhook

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é 1 de novembro de 2024.

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.

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.

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 de assinatura de carga útil e segredo como parâmetro de query.

HTTP/1.1 ou superior é necessário ao fazer solicitações.

Observação

Para maior segurança, 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.

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>

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'

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

response.setStatusCode(201);
setBody(body)
body string ou BSON.Binary

Definir o corpo da resposta HTTP .

Se body for uma string, ela será codificada para BSON.Binary antes de ser retornada.

Exemplo

response.setBody(
"{'message': 'Hello, World!'}"
);
setHeader(name, value)
name string
value string

Definir o cabeçalho de resposta HTTP especificado por name para o valor passado no value argumento . Isso substitui quaisquer outros valores que já tenham sido atribuídos a esse cabeçalho.

Exemplo

response.setHeader(
"Content-Type",
"application/json"
);
addHeader(name, value)
name string
value string

Definir o cabeçalho de resposta HTTP especificado por name para o valor passado no value argumento . Ao contrário setHeader, isso não substitui outros valores que já foram atribuídos ao cabeçalho.

Exemplo

response.addHeader(
"Cache-Control",
"max-age=600"
);
response.addHeader(
"Cache-Control",
"min-fresh=60"
)
← Chamar uma ação de serviço [Obsoleto]