Webhooks - zilor-net/eShopOnContainers-CN-Wiki GitHub Wiki

eShopOnContainers 支持使用 webhook 来通知外部服务发生在 eShopOnContainers 内的事件。

Webhooks API

Webhooks API 是直接公开的(不通过任何 BFF),因为它的使用不绑定到任何特定的客户端。API 提供了注册和查看当前 webhook 的端点。

API 是经过身份验证的,所以你只能在身份验证时注册一个新的 webhook。当你查询 webhook 时,你只看到你注册的 webhook。

注册 webhook

注册 webhook 的过程涉及到两个方面:Webhook AP I和 Webhook客户端(在 eShopOnContainers 之外)。为了避免让客户端不受你的控制,注册 Webhook 时使用了一个基本的安全机制(称为 URL 授权):

  • 当注册 Webhook(使用 Webhook API 下的认证帐户)你必须传递一个令牌和一个“授予 URL”。
  • Webhooks API 将使用 HTTP OPTIONS调用“授予 URL”,并在“x-shop-whtoken”头中传递你发送的令牌。
  • Webhooks API 期望在响应的同一个x-shop-whtoken报头中,收到一个 HTTP 成功状态码和相同的令牌

如果在响应中没有发送令牌,或者 HTTP 状态代码不成功,那么 Webhooks API 会返回一个 HTTP 418 状态码。

当 eShopOnContainers 发送 webhook 时,这个令牌也被发送(在相同的报头中),让客户端选择处理或不处理该Hook。

Webhooks 客户端

Webhooks 客户端是一个简单的 Web(使用 Razor Pages 开发的),它允许你测 试eShopOnContainers 的Webhooks 系统。它允许你注册 “OrderPaid” webhook。

客户端是直接公开的(像所有其他客户端一样)。在 k8s 中,入口路径是' /webhooks-web '。

下面是这个演示客户端的配置值(和默认compose文件中使用的值):

- ASPNETCORE_URLS=http://0.0.0.0:80
- Token=6168DB8D-DC58-4094-AF24-483278923590      # Webhooks are registered with this token
- IdentityUrl=http://10.0.75.1:5105
- CallBackUrl=http://localhost:5114
- WebhooksUrl=http://webhooks.api
- SelfUrl=http://webhooks.client/
  • Token: 当 Webhooks 请求url授权时,客户端总是会发送这个令牌。客户端也期望这个令牌在 eShopOnContainers 发送的 webhook 中。
  • IdeneityUrl: Identity API 的 URL
  • CallBackUrl: Identity API 的回调 URL
  • WebhooksUrl: Webhooks API 的URL(使用内部容器网络)
  • SelfUrl: 演示客户端可以从 webhooks api 到达的URL。在k8s部署中使用基于 ingress 的 url,在 compose 中必须使用内部url。

还有一个名为ValidateToken的额外配置值。如果设置为true(默认为false), Webhook演示客户端会确保 eShopOnContainers 发送的 webhook 具有与Token配置值相同的token。

注:不管配置项ValidateToken的值如何,客户端总是在授予url时返回Token的值。