Jwt Can';t验证Twilio Authy webhook回调

Jwt Can';t验证Twilio Authy webhook回调,jwt,twilio,webhooks,authy,Jwt,Twilio,Webhooks,Authy,我正在尝试为Authy OneTouch推送身份验证设置Webhook。我成功注册到one\u touch\u request\u responsed事件,保存订阅调用中的webhook签名密钥,但我仍然无法验证请求:任何攻击者都可以伪造假请求并轻松绕过2FA检查 这让我很困惑,因为回调请求与前面提到的格式不匹配(特别是它们没有X-Authy-Signature头),并且只有以下头: { host: 'XXX.ngrok.io', 'user-agent': 'Authy-api-web

我正在尝试为Authy OneTouch推送身份验证设置Webhook。我成功注册到
one\u touch\u request\u responsed
事件,保存订阅调用中的webhook签名密钥,但我仍然无法验证请求:任何攻击者都可以伪造假请求并轻松绕过2FA检查

这让我很困惑,因为回调请求与前面提到的格式不匹配(特别是它们没有
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_令牌”}
):我总是得到一个无效的签名(使用相同的方法)

检查webhook POST回调真实性的正确方法是什么


谢谢

这里是Twilio开发者福音传道者

在我看来,似乎您已经找到了Authy webhooks会话,您可以订阅该会话,以便了解用户使用Authy API的各个部分的最新情况

为了获得OneTouch推送通知的webhook,您应该在Twilio控制台的Authy应用程序推送通知设置下设置webhook URL

设置webhook URL后,您将发现webhook事件通过应用程序获得推送认证批准和拒绝。这些请求还将附带
X-Authy-Signature-Nonce
X-Authy-Signature
标题,您将能够


很抱歉弄糊涂了,希望这能帮你澄清。

谢谢@philnash。我通过API而不是Twilio控制台设置了webhook URL,这有什么不同吗?我确实看到webhook事件通过我的应用程序,我使用的是ngrok代理,正如前面提到的,请求没有X-
Authy签名Nonce
X-Authy-Signature
头。这是不是可以通过Twilio控制台而不是API注册来解决的问题?是的,我相信会的。这就是我以前设置webhooks的方式,它通过控制台对我起作用。事实上,我现在意识到这是两种注册webhooks的独立方式:-twilio控制台:入站请求作为带有
X-Authy-Signature-Nonce
头的纯json,我可以成功地验证请求。-webhook注册:入站请求作为JWT令牌,没有自定义头,但我似乎无法验证它们。考虑到我可以直接从注册过程中指定回调url(我的回调url会定期更改),我仍然更愿意使用此路径。真奇怪,要验证JWT,您需要API签名密钥。这就是你的工作吗?详情在这一页上:恐怕那时我有点迷路了。它必须是其中一个签名密钥!也许您可以使用当前用于验证JWT的代码更新问题?这样可能更容易看到发生了什么。
const jwt = require("jsonwebtoken");
jwt.verify(req.body.body, Buffer.from(MY_SECRET_KEY, "base64"), { algorithm: ["HS256"] });