我正在为我们的解决方案评估Twilio Webhook。它很有魅力。我想检测并验证它是真实的TWILIO调用,而不是BOT/FAKE,它正在调用我们的EndPoint(IPN侦听器,我们为TWILIO WebHook侦听器指定的URL)。
我不喜欢检查UserAgent值是否包含"TwilioProxy"的想法。你推荐一个更好的方法吗?
这里是Twilio开发人员的传道者。
你完全可以验证一个webhook是一个真正的Twilio请求。
对于每个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标头中提交的哈希进行比较。如果他们匹配,那么你就可以走了
这一切都在我们的安全页面上进行了描述和示例。如果你正在使用我们的官方帮助库,那么将有一种方法来验证这一点。