Webhook Requests & Responses [非推奨]
重要
サードパーティ サービスとプッシュ通知の廃止
Atlas App Services のサードパーティ サービスとプッシュ通知は非推奨となり、代わりに関数内の外部依存関係を使用する HTTP エンドポイントを作成できるようになりました。
Webhook はHTTPS endpointsに名前変更され、動作は変更されません。 既存の Webhook を移行する必要があります。
既存のサービスは、 30、2025 まで引き続き機能します。
サードパーティ サービスとプッシュ通知は非推奨になったため、App Services UI からデフォルトで削除されました。 既存のサードパーティ サービスまたはプッシュ通知を管理する必要がある場合は、次の操作を実行して構成を UI に追加できます。
左側のナビゲーションの [ App Settings Manageセクションの下にある [] をクリックします。
Temporarily Re-Enable 3rd Party Servicesの横にあるトグル スイッチを有効にし、変更を保存します。
Overview
サービスに応じて、受信 Webhookは、リクエストを検証し、Atlas App Services が外部サービスに返す応答をカスタマイズするためのいくつかの方法を提供します。
リクエスト検証方法
Webhook リクエストが信頼できるソースからのものであることを検証するために、一部の外部サービスでは、受信リクエストにいくつかの方法で秘密の string を含める必要があります。 HTTP Serviceなどの他のサービスでは、オプションでリクエスト検証を要求できます。
Webhook には、 Request Validation ペイロード署名検証とクエリ パラメータとしてのシークレット の 2 つのタイプがあります。
リクエストを行う際には、HTTP/1.1 以上が必要です。
注意
最大限のセキュリティを強化するには、secret
Python シークレット モジュール などの安全なパッケージを使用して string をプログラム的に生成します。 。シークレットを公開したり、バージョン管理システムに含めたりしないことを確認してください。
ペイロード署名検証
Verify Payload Signatureリクエスト検証オプションでは、受信リクエストに、リクエスト本文とX-Hook-Signature
ヘッダーにsecret
string から生成された 16 進数でエンコードされた HMAC SHA-256 ハッシュが含まれている必要があります。
例
次の Webhook リクエストの本体とシークレットについて考えてみましょう。
const body = { "message":"MESSAGE" } const secret = 12345
次のAtlas Functionは、このbody
と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"
ハッシュ値は、すべてのリクエストでX-Hook-Signature
HTTP リクエスト ヘッダーに割り当てる必要があります。
X-Hook-Signature:sha256=<hex-encoded-hash>
リクエストが適切に署名されているかどうかをテストするには、次のcurl
コマンドを実行します。
curl -X POST \ -H "Content-Type: application/json" \ -H "X-Hook-Signature:sha256=828ee180512eaf8a6229eda7eea72323f68e9c0f0093b11a578b0544c5777862" \ -d '{"message":"MESSAGE"}' \ <webhook URL>
クエリ パラメーターとしてのシークレット
Require Secret as Query Paramリクエスト検証オプションでは、受信リクエストにsecret
クエリ パラメータ として指定された string が含まれている必要があります。 URL の末尾に追加されます。
例
12345
のsecret値を使用するように構成された Webhook について考えてみましょう。 すべてのリクエストは、クエリ パラメーターとしてシークレットを追加した Webhook URL で行われる必要があります。
<webhook URL>?secret=12345
この URL へのリクエストが正しく検証されるかテストするには、次のcurl
コマンドを実行します。
curl -H "Content-Type: application/json" \ -d '{ "message": "HELLO" }' \ -X POST '<webhook URL>?secret=12345'
Webhook 応答オブジェクト
App Services は、Webhook の HTTP レスポンスを表すresponse
オブジェクトを Webhook 関数の 2 番目の引数として自動的に渡します。 次の表は、 response
オブジェクトを変更するために利用できる方法を示しています。
方式 | Arguments | 説明 | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
setStatusCode(code) | code integer | HTTP 応答ステータス コードを設定します。 例
| |||||||||
setBody(body) | body stringまたはBSON.Binary | HTTP レスポンス本体を設定します。
例
| |||||||||
setHeader(name, value) | name stringvalue string |
例
| |||||||||
addHeader(name, value) | name stringvalue string | HTTP レスポンス ヘッダー の設定 例
|