Webhook 请求和响应 [已弃用]
重要
第三方服务和推送通知弃用
App Services 中的第三方服务和推送通知已弃用,转而创建在函数中使用外部依赖项的 HTTP 端点。
Webhook 已重命名为 HTTPS 端点,行为没有发生变化。您应该迁移现有的 Webhook。
现有服务将继续运行到 9 月30 ,2025 。
由于第三方服务和推送通知现已弃用,因此,默认将其从 App Services 用户界面中删除。如果您需要管理现有的第三方服务或推送通知,可以执行以下操作以将配置重新添加到用户界面中:
在左侧导航栏中的 Manage(管理)部分下面,单击 App Settings(应用设置)。
启用 Temporarily Re-Enable 3rd Party Services(暂时重新启用第三方服务)旁边的切换开关,然后保存更改。
Overview
根据服务的不同,传入的 Webhook提供多种方法来验证请求并自定义 Atlas App Services 发回外部服务的响应。
请求验证方法
为了验证 Webhook 请求是否来自可信来源,某些外部服务要求传入请求以几种规定方式之一包含密钥字符串。 其他服务,如HTTP Service,允许您选择要求请求验证。
Webhook 有两种类型的Request Validation : 有效负载签名验证和作为查询参数的密钥。
发出请求时需要使用 HTTP/1.1 或更高版本。
注意
为了最大限度地提高安全性,请使用安全包(例如Python 密钥模块 ) 以编程方式生成 。secret
string确保您没有发布密钥或将其包含在版本控制系统中。
有效负载签名验证
Verify Payload Signature请求验证选项要求传入请求包含从请求正文生成的十六进制编码的 HMAC SHA-256 哈希以及X-Hook-Signature
标头中的secret
字符串。
例子
考虑以下 Webhook 请求正文和密钥:
const body = { "message":"MESSAGE" } const secret = 12345
以下Realm 函数会为此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 Paramsecret
string请求验证选项要求传入请求包含指定的 作为 查询参数 附加到URL 的末尾。
例子
考虑将 Webhook 配置为使用12345
的secret值。 所有请求都必须向附加有作为查询参数的密钥的 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 函数。 下表列出了修改response
对象的可用方法:
方法 | 参数 | 说明 | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
setStatusCode(code) | code 整型 | 设置 HTTP 响应 状态代码 。 例子
| |||||||||
setBody(body) | body string或BSON.Binary | 设置 HTTP 响应 正文 。 如果 例子
| |||||||||
setHeader(name, value) | name stringvalue string | 将 例子
| |||||||||
addHeader(name, value) | name stringvalue string | 将 例子
|