我正在为我们的解决方案评估Twilio Webhooks。它很有魅力。 我想检测并验证它是真正的TWILIO呼叫,而不是BOT / FAKE,即调用我们的EndPoint(IPN监听器,我们为Twilio WebHook监听器指定的URL)。
我不喜欢检查UserAgent值包含" TwilioProxy"的想法。你建议采用更好的方法吗?
答案 0 :(得分:2)
Twilio开发者传道者在这里。
你绝对可以validate that a webhook is a genuine Twilio request。
每次webhook请求时,Twilio都会发送一个带有签名的X-Twilio-Signature
标头。签名使用以下方法创建:
- Twilio将其请求汇总到您的应用程序,包括最终的URL和任何POST字段(如果请求是POST)。
- 如果您的请求是POST,Twilio将获取所有POST字段,按字母顺序按名称对它们进行排序,并将参数名称和值连接到URL的末尾(没有分隔符)。
- Twilio获取结果字符串(带有查询字符串和所有POST参数的完整URL),并使用HMAC-SHA1和您的AuthToken作为密钥对其进行签名。
醇>
要验证签名,您需要:
- 从协议(https ...)到结束时,获取您为电话号码或应用指定的请求网址的完整网址 查询字符串(后面的所有内容?)。
- 如果请求是POST,请按字母顺序对所有POST参数进行排序(使用Unix样式区分大小写的排序顺序)。
- 遍历POST参数的排序列表,并将变量名称和值(没有分隔符)附加到URL的末尾 字符串。
- 使用您的AuthToken作为密钥,使用HMAC-SHA1签署结果字符串(请记住,您的AuthToken案例很重要!)。
- Base64对生成的哈希值进行编码。
- 将您的哈希值与我们的哈希值进行比较,并在X-Twilio-Signature标头中提交。如果他们匹配,那么你很高兴。
醇>
我们在Security page上通过示例对此进行了描述。如果您正在使用我们的official helper libraries之一,那么将有一种方法来验证已内置的内容。