Docs 菜单
Docs 主页
/ /
Atlas App Services
/ /

Webhook 请求和响应 [已弃用]

在此页面上

  • Overview
  • 请求验证方法
  • 有效负载签名验证
  • 作为查询参数的密钥
  • Webhook 响应对象

重要

第三方服务和推送通知弃用

App Services 中的第三方服务和推送通知已弃用,转而创建在函数中使用外部依赖项的 HTTP 端点。

Webhook 已重命名为 HTTPS 端点,行为没有发生变化。您应该迁移现有的 Webhook。

现有服务将继续运行到 9 月30 ,2025

由于第三方服务和推送通知现已弃用,因此,默认将其从 App Services 用户界面中删除。如果您需要管理现有的第三方服务或推送通知,可以执行以下操作以将配置重新添加到用户界面中:

  • 在左侧导航栏中的 Manage(管理)部分下面,单击 App Settings(应用设置)。

  • 启用 Temporarily Re-Enable 3rd Party Services(暂时重新启用第三方服务)旁边的切换开关,然后保存更改。

根据服务的不同,传入的 Webhook提供多种方法来验证请求并自定义 Atlas App Services 发回外部服务的响应。

为了验证 Webhook 请求是否来自可信来源,某些外部服务要求传入请求以几种规定方式之一包含密钥字符串。 其他服务,如HTTP Service,允许您选择要求请求验证。

Webhook 有两种类型的Request Validation有效负载签名验证作为查询参数的密钥。

发出请求时需要使用 HTTP/1.1 或更高版本。

注意

为了最大限度地提高安全性,请使用安全包(例如Python 密钥模块 ) 以编程方式生成 。secretstring确保您没有发布密钥或将其包含在版本控制系统中。

Verify Payload Signature请求验证选项要求传入请求包含从请求正文生成的十六进制编码的 HMAC SHA-256 哈希以及X-Hook-Signature标头中的secret字符串。

例子

考虑以下 Webhook 请求正文和密钥:

const body = { "message":"MESSAGE" }
const secret = 12345

以下Realm 函数会为此bodysecret生成哈希:

// 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 Paramsecretstring请求验证选项要求传入请求包含指定的 作为 查询参数 附加到URL 的末尾。

例子

考虑将 Webhook 配置为使用12345secret值。 所有请求都必须向附加有作为查询参数的密钥的 Webhook URL 发出:

<webhook URL>?secret=12345

为了测试对该 URL 的请求是否已正确验证,我们可以运行以下curl命令:

curl -H "Content-Type: application/json" \
-d '{ "message": "HELLO" }' \
-X POST '<webhook URL>?secret=12345'

App Services 会自动将表示 Webhook 的 HTTP 响应的response对象作为第二个参数传递给 Webhook 函数。 下表列出了修改response对象的可用方法:

方法
参数
说明
setStatusCode(code)
code 整型

设置 HTTP 响应 状态代码

例子

response.setStatusCode(201);
setBody(body)
body stringBSON.Binary

设置 HTTP 响应 正文

如果body是字符串,则在返回之前将其编码为BSON.Binary

例子

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

name 指定的 HTTP 响应标头设为在 value 参数中传递的值。此操作会覆盖可能已分配给该标头的所有其他值。

例子

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

name 指定的 HTTP 响应标头设为在 value 参数中传递的值。与 setHeader 不同,这样不会覆盖已分配给该标头的其他值。

例子

response.addHeader(
"Cache-Control",
"max-age=600"
);
response.addHeader(
"Cache-Control",
"min-fresh=60"
)

后退

调用服务操作