首页 > 解决方案 > 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 和参数映射都按预期形成。任何人都可以在这里帮忙。

标签: twilio

解决方案


推荐阅读