Twilio ReqestValidator始终返回false

时间:2017-09-21 19:39:53

标签: .net security twilio

使用Twilio的RequestValidator时,.Validate函数始终返回false。我不确定我是否遗漏了某些内容,或者我是否真的使用了不正确的信息。代码如下:

    public ActionResult Text(string messageSid, string body, string to, string from)
    {
        var validator = new RequestValidator(AuthToken);

        var parameters = new Dictionary<string, string>
                         {
                             {"Body", body},
                             {"From", from},
                             {"MessageSID", messageSid},
                             {"To", to}
                         };

        var signature = Request.Headers["X-Twilio-Signature"];
        var url = @"https://e5f89299.ngrok.io/Home/Text";

        var b = validator.Validate(url, parameters, signature);
}

我按字母顺序输入参数,网址是我为Twilio提供的网址。签名看起来也正确。我错过了什么?

1 个答案:

答案 0 :(得分:0)

Twilio开发者传道者在这里。

查看您的代码,您几乎做得很好,但事实证明,Twilio会向您的应用程序发出请求,传递的信息比您实际期望的要多得多,并且在回顾中,我很欣赏,也许我们的文档并没有真正证明这一点。

我已经创建了一个示例应用程序here,其中显示了一个与当前版本的API一起使用的示例。但基本上,这一切都归结为不是硬编码参数,你可以做类似于我在此做的事情:

public IActionResult SendMessage(IFormCollection fc)
{
    // The Twilio request URL
    const string url = "https://31123028.ngrok.io/api/Message";

    // Initialize the validator
    var validator = new Twilio.Security.RequestValidator(_authtoken);

    // The X-Twilio-Signature header attached to the request
    var twilioSignature = "empty";
    StringValues headerValues;
    if (Request.Headers.TryGetValue("X-Twilio-Signature", out headerValues))
    {
        twilioSignature = headerValues.FirstOrDefault();
    }

    Console.WriteLine(twilioSignature);

    var parameters = fc.Keys.ToDictionary<string, string, string>(key => key, key => fc[key]);

    var hashedParameters = GetHashedParameters(url, parameters);
    Console.WriteLine(hashedParameters);
    Console.WriteLine(validator.Validate(url, parameters, twilioSignature));

    return Content("blah");
}

正如您所看到的,我循环遍历传入的所有参数,然后将它们添加到字典中,然后我将其传递到Validate方法。

var parameters = fc.Keys.ToDictionary<string, string, string>(key => key, key => fc[key]);

我还添加了一些调试和方法来告诉我,我生成了与Twilio相同的哈希。

希望这可以帮助你。