Webhook
使用 Webhook 可接收关于 AppScan 360° 中所发生事件的通知。
概述
通过 AppScan 360° REST API 支持用户定义的 HTTP 回调 (Webhook)。Webhook 会在 AppScan 360° 中发生事件时通知您。支持以下事件类型:
- 扫描执行完成
- 应用程序计数器或状态已更改
要使用 Webhook,请先下载 AppScan Presence 并将其安装在您的本地网络中(通常只需设置一次)。Presence 连接到 AppScan 360°。
触发 Webhook 时,Presence 会从 AppScan 360° 接收命令,并向本地网络中的 Webhook URI 发送 HTTP GET 请求。
由于 Presence 从您的网络内部发送请求,因此您可以直接通知内部服务器,而无需在防火墙上为来自 AppScan 360° 的传入请求开放任何端口。
使用 REST API 创建和管理 Webhook
要创建、管理和配置 Webhook,请使用 AppScan 360° REST API。Webhook 端点在公共 API 参考文档中进行了说明:
要创建 Webhook,请向 /api/v4/Webhooks 端点发送包含以下信息的 POST 请求:
- PresenceId:处理 Webhook 请求的 AppScan Presence 实例的标识
- Uri:事件触发时要调用的 HTTP 端点。此 URI 可以包含
{SubjectId}占位符。 - 事件:触发 Webhook 的事件类型(
ScanExecutionCompleted或ApplicationCountersChanged) - 全局:一个布尔值,用于指示该 Webhook 是全局 Webhook(适用于所有应用程序或资产组),还是限定范围的 Webhook(仅适用于特定应用程序或资产组)
- AssetGroupId:(可选)应用 Webhook 的资产组的标识
示例:扫描完成时触发的全局 Webhook
此示例将创建一个在扫描执行完成时触发的全局 Webhook。对于组织中的所有扫描,都会调用该 Webhook:
{
"PresenceId": "1234",
"Uri": "http://mysite.com/ScanEnded/{SubjectId}",
"Event": "ScanExecutionCompleted",
"Global": true
}
此 Webhook 被触发时,AppScan 360° 会向您的服务发送一个 GET 请求。{SubjectId} 值将替换为扫描执行标识:
GET /ScanEnded/9ea1fcb6-dc1d-443a-bfff-7465ced2ef1b HTTP/1.1
Host: mysite.com
要点:此 Webhook 不会在请求正文中发送事件数据。要获取更多数据(例如,扫描中所发现问题的列表),请实施一项单独的服务,该服务会处理 Webhook 事件,使用 API 密钥登录 AppScan 360°,然后通过 AppScan 360° API 检索所需的数据。
Webhook URI 占位符
定义 Webhook URI 时,您可以包含 {SubjectId} 占位符。此占位符将替换为事件主题的标识(通常为扫描执行标识)。您可以使用此值将基本事件上下文传递给 Webhook 处理程序。
带占位符的 URI 示例:
Webhook URI:http://myservice.com/ScanEnded/{SubjectId}
如果标识为 9ea1fcb6-dc1d-443a-bfff-7465ced2ef1b 的扫描执行完成,则 Webhook 将在以下位置进行调用:
http://mysite.com/ScanEnded/9ea1fcb6-dc1d-443a-bfff-7465ced2ef1b
Webhook 访问控制
要创建或修改 Webhook,您必须在 AppScan 360° 中拥有创建/修改 Webhook 许可权。缺省情况下,此许可权会分配给管理员和管理者角色,也可以添加到到自定义角色中。
您可以在组织级别或者为特定资产组定义 Webhook:
- 组织级别的 Webhook 由管理员或具有所有组的完全访问权限的用户进行定义和管理。
- 资产组级别的 Webhook 可由有权访问资产组并拥有创建/修改 Webhook 许可权的任何用户进行定义和管理。
Webhook 范围
您可以将 Webhook 定义为全局 Webhook 或限定范围的 Webhook。
每当组织或资产组中(具体取决于 Webhook 的定义位置)发生与 Webhook 事件类型相匹配的事件时,就会触发全局 Webhook。
如果某个 Webhook 并非全局 Webhook,则可以将它与一个或多个范围相关联。范围可以是一个特定的应用程序,或者如果 Webhook 是在组织级别定义的,则范围也可以是一个特定的资产组。
仅当事件在其中一个关联的范围内发生时,才会触发限定范围的 Webhook。
示例:如果 Webhook 是在扫描执行完成时触发的,并且范围是一个特定的应用程序,则每次该应用程序中有扫描执行完成时都会触发此 Webhook。
为限定范围的 Webhook 创建 Webhook 关联
如果 Webhook 不是全局 Webhook(即,如果您设置了 "Global": false),则您必须创建关联以指定该 Webhook 适用的应用程序或资产组。使用 Webhook 关联 API 端点创建这些关联。
要将 Webhook 与特定的应用程序或资产组相关联,请向 /api/v4/Webhooks/Associations/{id} 端点发送 POST 请求,其中 {id} 是您创建 Webhook 时返回的 Webhook 标识。
示例:适用于特定资产组的限定范围 Webhook
首先,创建一个限定范围的 Webhook(不是全局 Webhook):
{
"PresenceId": "1234",
"Uri": "http://mysite.com/ScanEnded/{SubjectId}",
"Event": "ScanExecutionCompleted",
"Global": false,
"AssetGroupId": "5678"
}
在您创建关联之前,此 Webhook 不会触发。接下来,使用关联端点将 Webhook 与特定应用程序相关联。这可确保仅当对该资产组内的关联应用程序进行扫描时,才会触发此 Webhook。
有关如何创建和管理 Webhook 关联的详细信息,请参阅 AppScan REST API 文档。