【问题标题】:Twilio - Validating Incoming Callback Request - JavaTwilio - 验证传入的回调请求 - Java
【发布时间】:2016-03-09 23:08:42
【问题描述】:

当 Twilio 调用回调方法来获取语音的 TwiML 时,我看到 Twilio 在 HTTP 标头中设置了“x-twilio-signature”。

我需要验证实际请求是否来自 Twilio。

我在 Tomcat 上运行了一个简单的 war 文件,该应用程序是使用 Spring 构建的。

我做了如下的事情:

//Get the TwilioUtils object initialized
TwilioUtils twilioUtils = new TwilioUtils("******myAuthToken");

//Get the URL from HttpRequest
String url = httpRequest.getRequestURL().toString();
Map<String, String> allRequestParams = getAllRequestParams(httpRequest);
Map<String, String> headers = getAllRequestHeaders(httpRequest);

//Get the signature generated for the Url and request parameters 
//allRequestParams is a map of all request values posted to my service by Twilio
String validSig = twilioUtils.getValidationSignature(url, allRequestParams);

//Get the x-twilio-signature value from the http header map
String xTwilioSignature = headers.get("x-twilio-signature”);

//This is different from what I get below
logger.info("validSig = " + validSig);
logger.info("xTwilioSignature = " + xTwilioSignature );
//This is always false
logger.info("Signature matched : " +  twilioUtils.validateRequest(xTwilioSignature, url,
   allRequestParams));

我想知道我做错了什么。我验证“x-twilio-signature”的方法不正确吗?

如果不正确,正确的做法是什么?

我正在使用 Twilio 提供的辅助库类 TwilioUtils 来验证它。

Twilio 的签名始终与我从 TwilioUtils 对象获得的不同。

【问题讨论】:

    标签: java validation callback twilio


    【解决方案1】:

    来自 Twilio 的梅根在这里。

    您是否按照security documentation 中建议的步骤进行操作?

    validateRequest 需要三个参数。我相信你错过了那里的网址。

    考虑这个例子:

    public class TwilioUtilsExample {
    
        public static void main(String[] args) {
    
            // Account details
            String accountSid = "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
            String authToken = "YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY";
    
            //This is the signature we expect
            String expected_sig = "SSSSSSSSSSSSSSSSSSSSSSSSSSSS";
    
            //This is the url that twilio requested
            String url = "http://UUUUUUUUUUUUUUU";
    
            //These are the post params twilio sent in its request
            Map<String,String> params = new HashMap<String,String>();
    
            // Be sure to see the signing notes at twilio.com/docs/security
            TwilioUtils util = new TwilioUtils(authToken, accountSid);
    
            boolean result = util.validateRequest(expected_sig, url, params);
    
            if (result) {
                System.out.print( "The signature is valid!\n" );
            } else {
                System.out.print( "The signature was NOT VALID.  It might have been spoofed!\n" );
            }
    
        }
    
    } 
    

    希望这有帮助!

    【讨论】:

    • Twilio 返回的表单参数有我的查询参数和Twilio Post 参数。 URL(对于 TwilioUtils)需要附加所有查询参数。然后对于地图(参数),我只需要设置 Twilio 设置的那些字段。由于表单同时具有查询参数和 Twilio 字段,因此我首先要提取我的查询参数并附加 URL。然后我必须从表单字段中删除我的所有查询参数并为其构建一个映射。然后它起作用了。
    • 我使用相同的方法。它适用于 GET,但对于 POST 总是错误的。
    猜你喜欢
    • 2016-11-03
    • 2020-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-05
    • 2023-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多