Botpress Webhook 认证库
用于验证 Botpress Webhook 签名的 TypeScript 库 。 这只应用于自发的集成和bots,因为Botpress Cloud自动处理签名验证.
免责声明
[大 此软件包将在
@bpinternal并主要供本组织内部使用 瓶装 团队。 因此,它可能具有不稳定的API,在不通知的情况下打破更改,以及有限的文件或支持. 这么说,我们公开了,因为我们爱开源! 请随意使用或用叉子,但我们建议使用特定版本.- Botpress工程队
特征
- HMAC-SHA256 签字核查: 根据共享机密验证签名
- 时间戳验证: 在±5分钟时间窗口外拒绝请求
- 秘密旋转: 支持零下限旋转的多密
- 资源管理: 使用自动清理
Disposable接口
安装
npm install --save @bpinternal/signature-verification
快速启动
import { createSignatureVerifier } from '@bpinternal/signature-verification'
// Create a verifier with your shared secret:
using verifier = createSignatureVerifier({
sharedSecrets: [process.env.WEBHOOK_SECRET],
})
// Verify a webhook request:
const isValid = await verifier.verify({
headers: req.headers,
rawBody: req.rawBody,
method: req.method,
})
if (!isValid) {
throw new Error('Invalid signature')
}
// Else, process the webhook...
使用量
秘密旋转( 零下时段)
支持多个机密, 以便逐步旋转 :
using verifier = createSignatureVerifier({
sharedSecrets: [
process.env.OLD_SECRET, // Still accepting old signatures
process.env.NEW_SECRET, // Now also accepting new signatures
],
})
在找到匹配之前 秘密会按顺序审判.
快速中件示例
import express from 'express'
import { createSignatureVerifier } from '@bpinternal/signature-verification'
const app = express()
// IMPORTANT: Capture raw body before parsing
app.use(
express.json({
verify: (req, res, buf) => {
req.rawBody = buf.toString('utf8')
},
})
)
using requestVerifier = createSignatureVerifier({
sharedSecrets: [process.env.WEBHOOK_SECRET],
})
// Create a reusable middleware:
const verifySignature = async (req, res, next) => {
const isValid = await requestVerifier.verify({
headers: req.headers,
rawBody: req.rawBody,
method: req.method,
})
if (!isValid) {
return res.status(401).json({ error: 'Invalid signature' })
}
next()
}
// Use the middleware in your routes:
app.post('/webhook', verifySignature, (req, res) => {
// Process webhook...
res.status(200).json({ message: 'Webhook received' })
})