问题描述
我正在尝试为authy Onetouch推送身份验证设置Webhooks。我设法成功注册了one_touch_request_responded
个事件,从订阅调用中保存了Webhook签名密钥,但是我仍然无法验证请求:任何攻击者都可以伪造伪造的请求并轻松绕过2FA检查。
API documentation令我感到困惑,因为回调请求与提到的格式不匹配(特别是它们没有X-authy-Signature
头),并且只有以下头: / p>
{
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回调的真实性的正确方法是什么?
谢谢!
解决方法
这里是Twilio开发人员的传播者。
在我看来,您似乎已经找到了可以订阅的Authy webhooks会话,以获取有关用户使用Authy API的各个方面的最新信息。
为了获取OneTouch推送通知的Webhook,您应该在Authy应用程序的推送通知设置下的Twilio控制台中设置Webhook URL。
一旦设置了Webhook URL,您将发现Webhook事件进入您的应用程序以进行推送身份验证批准和拒绝。这些请求还将带有X-Authy-Signature-Nonce
和X-Authy-Signature
标头,您将可以re-create the signature using the method explained here。
对不起,我感到困惑,希望可以为您解决。