我正在尝试为 Authy OneTouch 推送身份验证设置 webhook。我设法成功注册到one_touch_request_responded
事件,从订阅调用中保存了 webhook 签名密钥,但我仍然无法验证请求:任何攻击者都可以伪造虚假请求并轻松绕过 2FA 检查。
API 文档让我很困惑,因为回调请求与提到的格式不匹配(特别是它们没有X-Authy-Signature
标头),并且只有以下标头:
{
host: 'XXX.ngrok.io',
'user-agent': 'Authy-api-webhooks/1.0',
'content-length': '2211',
'accept-encoding': 'gzip',
'content-type': 'application/json',
'x-forwarded-for': '3.89.35.175',
'x-forwarded-proto': 'http'
}
我还尝试验证 JWT 令牌的签名,但仍然无济于事(传入POST
请求{"body":"a_jwt_token"}
:):我总是得到一个无效的签名(使用https://jwt.io/相同)。
const jwt = require("jsonwebtoken");
jwt.verify(req.body.body, Buffer.from(MY_SECRET_KEY, "base64"), { algorithm: ["HS256"] });
检查 webhook POST 回调真实性的正确方法是什么?
谢谢!