用途:帮助在 HTTP 端点接收并校验 Azure Event Grid 的事件投递,适用于配置 Event Grid WebHook 事件处理器、处理订阅验证事件、排查订阅卡在 AwaitingManualAction 或 Failed 等问题。
主要能力:实现两种订阅握手——Event Grid 架构下发 Microsoft.EventGrid.SubscriptionValidationEvent(需回显 validationCode),CloudEvents v1.0 架构下走 OPTIONS 滥用防护预检(通过 WebHook-Request-Origin 与 WebHook-Allowed-Origin 头表示同意)。通道鉴权提供三种方式:自定义投递属性头、查询参数客户端密钥、Microsoft Entra ID 承载令牌。还涵盖消息头解析、Event Grid 数组载荷与 CloudEvents 对象载荷的归一化、投递语义处理。
关键点:Event Grid 不对请求体签名,没有 X-Signature、HMAC 或共享签名密钥,不应编写 HMAC 校验器。安全依赖握手加通道鉴权两层。校验握手必须返回 200(202 不被接受)并在 30 秒内完成;先用 aeg-subscription-name 头过滤。查询密钥轮换时需同时接受新旧密钥,用常量时间比较,未配置时失败关闭。
使用方式:按参考文档创建主题与事件订阅(门户或 Azure CLI),配置投递属性或端点的查询令牌;本地开发可用 npx hookdeck-cli listen 3000 azure-event-grid --path /webhooks/azure-event-grid 获得 CA 签名的 HTTPS 隧道地址。
限制:仅支持 HTTPS 端点;成功码仅为 200-204;30 秒超时;400、401、403、413 不重试;至少一次投递且无顺序,需按事件 id 去重,aeg-delivery-count 大于 1 视为重试;重试策略为 1-30 次、TTL 1-1440 分钟。Entra ID 令牌声明集未公开,不应硬编码声明。自签名证书不支持校验。