python - 适用于 Python 的 Twilio RequestValidator 始终返回 false

标签 python google-app-engine twilio

我正在尝试将 Twilio 与 Google App Engine 结合使用。我目前正在尝试通过 SMS 消息验证来自 Twilio 的请求。我有一个自定义处理程序,其中包含以下 2 个方法。

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()来 self 的请求处理程序。这似乎总是返回 false。正如您从我上面的代码中看到的,这应该相当于调用 Twilio 的 RequestValidator(AuthToken).validate(self.request.url, self.request.POST, self.request.headers['X-Twilio-Signature'])

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

最佳答案

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

如果 Flask 仅配置为 HTTP,Heroku 显然会将 HTTPS 流量代理为 HTTP。 Flask 的 request.url 仍将以 http:// 开头,即使 Twilio 指向以 https:// 开头的 URL。这将消除哈希值。

关于python - 适用于 Python 的 Twilio RequestValidator 始终返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18755841/

相关文章:

python - 如何抑制 web.py 输出?

ios - twilio 视频 sdk 不工作

ios - Twilio videoView 委托(delegate)未调用

python - 在 Python 中,如何检查 StringIO 对象的大小?

python - 如何使用 gtkcssprovider 为 gtktextview 中的字母着色

google-app-engine - Jinja2 不返回循环变量

google-app-engine - 如何使用java读取google appengine中的图片url

node.js - Twilio 如何使用 Node js 进行两次出站调用并加入( session )它们

python - 如何在 python/R 中访问 xgboost 模型的单个树

java - 在一个查询中查询不同的EntitySubclass