GET /v1/findings。注册一个 URL,选择想要接收的事件类型,并验证每次投递的签名。
注册 Webhook
Webhook 在仪表盘的管理 → Webhooks(需要管理员角色)中管理:- 点击添加 Webhook,输入你的端点 URL(建议使用
https://;本地部署的内网地址也可以)。 - 选择要接收的事件类型。
- 复制注册后显示的签名密钥(
whsec_...)——与 API 密钥一样,它只显示一次。
delivered、retrying、failed、pending)、最近一次尝试的 HTTP 状态码和错误详情,以及创建/下次重试/完成时间。
事件类型
检测规则的匹配以
detection_rule.matched 投递,而不是 finding.created——
要覆盖 GET /v1/findings 中出现的全部内容,请同时订阅这两种事件类型。
事件同样受权限范围约束:Webhook 只接收其注册用户可见主机的事件。
负载
每次投递是一个 JSON 请求体的POST:
finding.reviewed在data中另有status(accepted/denied)、reviewed_by和notes。detection_rule.matched在data中另有rule({id, name, label})。data.finding_id始终存在;之后如需完整对象,可配合GET /v1/findings/{id}使用。
验证签名
每次投递携带以下请求头:
用你的签名密钥对时间戳、一个字面量
. 和原始请求体重新计算 HMAC,然后做恒定时间比较:
投递与重试
- 在 15 秒内返回任意
2xx即确认收到投递。重定向不会被跟随,会计为失败。 - 投递失败后按递增间隔重试——1 分钟、5 分钟、30 分钟、然后 2 小时——共 5 次尝试后标记为
failed。每条投递的尝试次数和最新结果都记录在投递日志中。 - 投递语义为至少一次(at-least-once):极少数情况下可能重复,如果你的处理器不是幂等的,请按
X-Hilt-Event-Id去重。 - 新注册的 Webhook 从注册时刻开始接收事件——不会重放历史检测发现。
