簡體   English   中英

Twilio-驗證傳入的回調請求-Java

[英]Twilio - Validating Incoming Callback Request - Java

當Twilio調用回調方法以獲取Voice的TwiML <Say>時,我看到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簽名”的方法不正確嗎?

如果不正確,正確的方法是什么?

我正在使用Twilio提供的幫助程序庫類TwilioUtils進行驗證。

一直以來,Twilio的簽名與我從TwilioUtils對象獲得的簽名不同。

來自Twilio的Megan。

您是否遵循安全文檔中建議的步驟?

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" );
        }

    }

} 

希望這會有所幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM