Webhook 連携
Webhook でリアルタイムイベント通知を受信する
Webhook を利用すると、重要なイベント発生時にリアルタイムで通知を受け取り、お客様のシステムとの連携が可能になります。
Setup
- 設定 > 連携 > Webhook に移動
- Webhook の追加 をクリック
- Endpoint URL を入力
- Subscribe するイベントを選択
- 保存してテスト
Event Types
| Event | 説明 |
|---|---|
threat.created | 新しい脅威が作成された |
threat.updated | 脅威の status が更新された |
threat.resolved | 脅威が解決された |
scan.started | スキャンタスクが開始された |
scan.completed | スキャンタスクが完了した |
beacon.triggered | Beacon がトリガーされた |
token.accessed | Honeytoken がアクセスされた |
Request Format
POST /your-webhook-url
Content-Type: application/json
X-OpenBait-Signature: sha256=...
{
"id": "evt_xxx",
"type": "threat.created",
"created_at": "2024-01-20T10:30:00Z",
"data": {
"threat": {
"id": "thr_xxx",
"domain": "examp1e.com",
"type": "phishing",
"severity": "high",
"similarity": 0.95
}
}
}Signature Verification
リクエストが OpenBait から送信されたものであることを確認するため、signature を検証してください:
const crypto = require('crypto')
function verifySignature(payload, signature, secret) {
const expected = crypto
.createHmac('sha256', secret)
.update(payload)
.digest('hex')
return `sha256=${expected}` === signature
}
// Express example
app.post('/webhook', (req, res) => {
const signature = req.headers['x-openbait-signature']
const isValid = verifySignature(
JSON.stringify(req.body),
signature,
process.env.WEBHOOK_SECRET
)
if (!isValid) {
return res.status(401).send('Invalid signature')
}
// Handle event
const { type, data } = req.body
switch (type) {
case 'threat.created':
handleNewThreat(data.threat)
break
// ...
}
res.status(200).send('OK')
})Retry Policy
Webhook endpoint が 2xx 以外の status code を返した場合、以下のスケジュールでリトライします:
| Retry | Delay |
|---|---|
| 1st | 1 min |
| 2nd | 5 min |
| 3rd | 30 min |
| 4th | 2 hours |
4 回のリトライ後も失敗した場合、そのイベントは failed としてマークされます。