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 的 URLCallBackUrl
: Identity API 的回调 URLWebhooksUrl
: Webhooks API 的URL(使用内部容器网络)SelfUrl
: 演示客户端可以从 webhooks api 到达的URL。在k8s部署中使用基于 ingress 的 url,在 compose 中必须使用内部url。
还有一个名为ValidateToken
的额外配置值。如果设置为true
(默认为false
), Webhook演示客户端会确保 eShopOnContainers 发送的 webhook 具有与Token
配置值相同的token。
注:不管配置项
ValidateToken
的值如何,客户端总是在授予url时返回Token
的值。