1

我正在尝试将 Twilio 与 Google App Engine 一起使用。我目前正在尝试使用 SMS 消息验证来自 Twilio 的请求。我有一个自定义处理程序,上面有以下两种方法。

from twilio.util import RequestValidator

class TwilioRequestHandler(BaseRequestHandler):
    def twilio_request_validator(self):
        return RequestValidator(AUTH_TOKEN)

    def validate_request(self):
        if not 'X-Twilio-Signature' in self.request.headers:
            logging.error("X-Twilio-Signature was not in the request headers")
            return False
        return self.twilio_request_validator().validate(self.request.url, self.request.POST, self.request.headers['X-Twilio-Signature'])

当我的 TwiML 端点之一收到请求时,我会self.validate_request()从我的请求处理程序中调用。这似乎总是返回错误。从我上面的代码可以看出,这应该相当于调用 Twilio 的RequestValidator(AuthToken).validate(self.request.url, self.request.POST, self.request.headers['X-Twilio-Signature'])

我认为在计算签名时可能不应该包含我收到的一些请求参数,所以我什至为一个请求获取参数,创建一个简单的脚本检查所有可能的组合,并且将其与该请求的签名进行比较。他们都没有成功,所以我必须好奇我做错了什么,或者这是否可能是 Twilio 方面的问题。

4

1 回答 1

1

您是否针对 Twilio 端点检查了请求 URL 上的协议?

如果 Flask 仅配置为 HTTP,Heroku 显然会将 HTTPS 流量代理到 HTTP。http://即使 Twilio 指向一个以 . 开头的 URL,Flask 的 request.url 仍将以https://. 这将摆脱散列。

于 2015-01-31T06:26:44.813 回答