它是如何产生的?我怎么验证它?
https://developer.bigcommerce.com/api/webhooks-getting-started
{
"store_id": 11111,
"producer": "stores/abcde",
"scope": "store/order/statusUpdated",
"data": {
"type": "order",
"id": 173331
},
"hash": "3f9ea420af83450d7ef9f78b08c8af25b2213637"
}
我建议使用自定义标头验证有效负载来自BigCommerce,如getting started guide中所述:
包含一个或多个名称 - 值对的标头对象,两个字符串值(可选)。如果您选择包含标头对象,Bigcommerce将在运行时将其POST请求的HTTP标头中的名称 - 值对包含在您的回调URI中。虽然此功能可用于任何目的,但可以使用它来设置秘密授权密钥并在运行时进行检查。这提供了额外的保证,即POST请求来自Bigcommerce而不是其他一方,例如恶意行为者。
这是由他们的开发者传播者@KarenWhite回答的。 https://support.bigcommerce.com/s/question/0D51B00004G6kJf/incoming-webhook-posts-hash-field-in-payload
它使用SHA-1进行哈希处理,但未使用客户端密钥进行签名:
$payload['hash'] = sha1(json_encode($payload));
此外,关于webhook安全性的立场记录在2018年的市政厅https://support.bigcommerce.com/s/article/BigCommerce-Town-Hall-February-2018
问:如何确保仅由BigCommerce启动webhook回调,以及BigCommerce和我的服务器端点之间的数据是否未更改?可以使用webhook有效负载中返回的哈希来验证请求吗?
答:我们今天的webhooks包含非常少的信息 - 它们只包含一个I.D.去查找其他信息。您需要获得授权才能验证I.D.针对商店的API来确定所请求的实际信息。我们还使用TLS加密来保护我们的webhook,并使开发人员能够将自己的标头添加到事件中以获得额外的安全性。