twilio - POST 调用的 Twilio 回调签名验证始终失败
问题描述
我已将消息与 Twilio 集成,并正在使用 Twilio 回调来更新系统中消息的状态。当 twilio 响应状态时,POST api 总是失败。
我已按照 twilio 文档https://www.twilio.com/docs/usage/security#validating-requests中的步骤进行操作
以下是我正在做的事情: 1. 提取请求 URL 并附加查询参数 2. 获取参数映射,过滤掉属于此映射的任何请求参数 3. 通过从 twilio sdk 调用 validate 进行验证
我发现我生成的签名与来自 twilio 的 POST 方法的签名不匹配
这是我获取完整请求 URL 的代码:
StringBuilder requestURL = new
StringBuilder(request.getRequestURL().toString());
String queryString = request.getQueryString();
String requestURLString = "";
if (StringUtils.isBlank(queryString))
{
requestURLString = requestURL.toString();
}
else
{
requestURLString = requestURL.append('?').append(queryString).toString();
}
然后我得到这样的请求参数映射:
Map<String, String[]> requestParameterMap = request.getParameterMap();
稍后,我将过滤属于我的 requestParameterMap 的任何额外请求参数:
if (StringUtils.isNotBlank(request.getQueryString()))
{
Arrays.asList(request.getQueryString().split("&")).stream()
.forEach(p -> params.remove(p.split("=")[0]));
}
然后调用 twilo util 来计算签名:
RequestValidator validator = new RequestValidator(authToken);
isValid = validator.validate(serverURL, params, expectedSignature);
从 Twilio 控制台检查我的请求,这是我的请求的样子:
请求:http: //7096a2e1.ngrok.io/api/text/textMessage/updateStatus
Parameters : ApiVersion 2010-04-01 MessageStatus delivered SmsSid SMa72ee979a8374b218107081b04d7eb9a SmsStatus delivered From +17326418522 To +19086160992 MessageSid SMa72ee979a8374b218107081b04d7eb9a AccountSid AC134c1c93ef7ef868e85ba9264b4024a1
在我的本地服务器中调试时,我可以看到请求 URL 和参数映射都按预期形成。任何人都可以在这里帮忙。
解决方案
推荐阅读
- tkinter - tkinter Entry 小部件检测是否有任何选择
- c# - 在另一个的大致方向上获得随机向量?
- php - 为什么在 PHP 中使用 $_FILES 时出现未定义的数组键并尝试访问类型为 null 的值的数组偏移量错误
- mongodb - MongoDB 中 runCommand 的 Liquibase 语法
- html - 增加css动画上伪元素的大小
- javascript - JS 类中的方法 - 为什么代码会抛出错误?
- python - 用户创建的实例
- javascript - 如何记录/获取嵌套数组的值
- android - 安卓|| 刀柄的声纳代码覆盖问题(依赖注入)
- ruby - 尝试使用 jekyll 时如何解决此捆绑更新错误?