Twilio Webhooks,正在验证真正的Twilio请求

Twilio Webhooks,正在验证真正的Twilio请求,twilio,webhooks,Twilio,Webhooks,我正在为我们的解决方案评估Twilio Webhook。它很有魅力。 我想检测并验证它是真正的TWILIO调用,而不是对我们的端点(IPN侦听器,我们为TWILIO WebHook侦听器指定的URL)进行调用的BOT/FAKE 我不喜欢检查UserAgent值是否包含“TwilioProxy”的想法。你推荐一个更好的方法吗?这里是Twilio开发者福音传道者 你绝对可以 对于每个webhook请求,Twilio都会发送一个带有签名的X-Twilio-Signature头。使用以下方法创建签名:

我正在为我们的解决方案评估Twilio Webhook。它很有魅力。 我想检测并验证它是真正的TWILIO调用,而不是对我们的端点(IPN侦听器,我们为TWILIO WebHook侦听器指定的URL)进行调用的BOT/FAKE


我不喜欢检查UserAgent值是否包含“TwilioProxy”的想法。你推荐一个更好的方法吗?

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

你绝对可以

对于每个webhook请求,Twilio都会发送一个带有签名的
X-Twilio-Signature
头。使用以下方法创建签名:

  • Twilio将其请求组装到您的应用程序中,包括最终URL和任何POST字段(如果请求是POST)
  • 如果您的请求是POST,Twilio将获取所有POST字段,按名称的字母顺序对它们进行排序,并将参数名称和值连接到URL的末尾(不带分隔符)
  • Twilio获取结果字符串(包含查询字符串和所有POST参数的完整URL),并使用HMAC-SHA1和AuthToken作为密钥对其进行签名
  • 要验证签名,您需要:

  • 从协议(https…)到应用程序末尾,获取您为电话号码或应用程序指定的请求URL的完整URL 查询字符串(后面的所有内容?)
  • 如果请求是POST,请按字母顺序对所有POST参数进行排序(使用Unix风格的区分大小写的排序顺序)
  • 遍历已排序的POST参数列表,并将变量名和值(不带分隔符)附加到URL的末尾 绳子
  • 使用AuthToken作为密钥,使用HMAC-SHA1对结果字符串进行签名(记住,AuthToken的大小写很重要!)
  • Base64对生成的哈希值进行编码
  • 将您的哈希值与我们的哈希值进行比较,并在X-Twilio-Signature头中提交。如果他们匹配,你就可以走了

  • 在我们的例子中,这些都有描述。如果您使用的是我们的其中一个,那么将有一个方法来验证已经内置的内容。

    在WebHook发布到的URL上,您可以添加一些哈希密钥并验证该值吗?例如,我正在使用以下方法:RequestValidator validator=newrequestvalidator();//Twilio.TwiML var isAuth=validator.IsValidRequest(HttpContext.Current,_client.IpmAuthToken)的类;如果isAuth==TRUE,则它已通过身份验证。很难阅读您评论中的代码,但您已经说过问题已得到回答,因此我希望这是肯定的!如果还有什么我可以帮忙的,请告诉我。我是Twilio的新手,我不太清楚什么时候应该进行签名验证。是否应该在将消息发送到Twilio并存储之前完成生成哈希的步骤-等待Twilio的webhook回调-然后进行比较?我有一个Windows服务/控制台应用程序正在向Twilio发送短信,然后是一个asp.net MVC web应用程序,它接收并处理短信的状态webhook回调。大概在我将消息发送给Twilio之前我需要存储这个散列,以便在webhook启动时可以对其进行比较-正确吗?如果是这样,文档不会显式声明。@lg1382否,签名完全由webhook的内容以及您的身份验证令牌生成。因此,创建签名只需要请求详细信息。再次阅读上面的验证步骤,它们描述了如何构建签名,如果您使用的是Twilio helper库,它应该包含一个可以使用的签名验证方法。@philnash-我发现Devin Rader的一个旧链接,其中提到您可以放置“ValidateRequest(authtoken)”属性,它将为您执行此操作。。。不幸的是,我的测试失败了。当我使用错误的身份验证令牌时,控制器仍然处理来自Twilio的请求。仅供参考:我会重新阅读这份文件,看看是否能解决这个问题。谢谢