セキュリティ

暗号化された通信

TwilioはTwilioとアプリケーション間の暗号化された通信をサポートします。HTTPS URLをお使い頂けます。注意 : Twilio は現在自己署名をハンドリングできません

TLS 暗号化プロトコルをサポートします。SSLv3 は公式に廃止される予定です。

HTTP認証

Twilioで使える認証形式は、BASIC認証とダイジェスト認証です。 これらはWebサーバ上の TwiML を、ユーザとTwilioのみからアクセスできるよう保護することができます。 ユーザ名とパスワードは以下のURL形式で指定できます。

https://username:password@www.myserver.com/my_secure_document

Twilioは 与えられたユーザー名とパスワードを使い認証を行い、通話中にログインしたままにします。HTTP認証を暗号化と組み合わせて使うことを強くお薦めします。より詳しい情報はベーシック認証ダイジェスト認証や現在お使いのウェブサーバーのドキュメントをご覧ください。

パスワードで保護されたURLを指定した場合、Twilioはまず Authorization ヘッダーを含めずリクエストを送信します。 開発者のサーバーが 401 Unauthorized ステータスコード、 WWW-Authenticate ヘッダー、および realm を伴ったレスポンスを返すと、Twilioは同一のリクエストを Authorization ヘッダーを伴って返します。

開発者のサーバーからのレスポンス例:

HTTP/1.1 401 UNAUTHORIZED
WWW-Authenticate: Basic realm="My Realm"
Date: Wed, 21 Jun 2017 01:14:36 GMT
Content-Type: application/xml
Content-Length: 327

Twilioからのバリデーションリクエスト

もしユーザアプリケーションが機密データを扱っていたり、データに伴う変移を行うような場合、受け取るHTTPリクエストが確かにTwilioからのものであり、不審な第三者からのものではないことを確実にしたいかもしれません。 この水準のセイキュリティーを担保したい場合、Twilio はそれらのリクエストに対し暗号化した署名を付与することができます。 このような仕組みです:

  1. TLSをサーバーで有効にし、TwilioアカウントにHTTPSのURLを設定して下さい。
  2. もしリクエストがPOSTの場合は、POSTフィールドを含む、ユーザアプリケーションにリクエストするべき最終URLを組み立てます。
  3. リクエストがPOSTの場合、Twilioは全てのPOSTフィールドを、フィールド名のアルファベット順に並び替え、パラメータ名と値を結合し、区切り文字無しで結合します。
  4. 最終URL(クエリーストリングと全てのPOSTパラメータを含む完全なURL) を、ユーザのAuthToken を鍵として HMAC-SHA1 で署名します。
  5. 5. Twilio がこの署名を X-Twilio-Signature のヘッダーにて HTTP を用いて送信します。

末端側でもしこのリクエストの正当性を確認したい場合は、上記と全く同じプロセスでデータストリングをリアセンブルします。 もし2つのハッシュが一致すれば、そのリクエストは正当であるとみなします。 こうして、最終URLを含む全てのハッシュ構造のデータはTwilioから送られたものであることが担保されます。 以下は、末端側でどのようにバリデーションを行えばよいかの手順です。

  1. 対象の完全URL、プロトコルから始まり、全クエリーストリングを含むもの (https から始まり、 ? で指定するものを全て含む) を取得します。
  2. もしリクエストがPOSTの場合、全てのPOSTパラメータをUnix形式の大文字小文字を区別するソート方法で、アルファベット順に並び替えます。
  3. ソートしたPOSTパラメータに、URLの最後まで繰り返しパラメータ名と値(区切り文字を使わない)を当て込んでいきます。
  4. 最終URLの文字列に、ユーザの AuthToken を鍵として(大文字小文字を区別します)、HMAC-SHA1 形式で署名します。
  5. 結果のハッシュ値をBase64でエンコードしてください。
  6. 結果のハッシュ値とTwilio側が署名した X-Twilio-Signatureヘッダを比較します。 これらが一致すれば問題ありません。

以下の例で全体の流れを確認してみましょう。Twilioがユーザ側へ以下をPOSTしたとします。

https://mycompany.com/myapp.php?foo=1&bar=2

そして、Twilioがいくつかの数字をそのURLを送ります。ついでに、通常のPOSTフィールドも埋めておきます。

  • 数字: 1234
  • To: +18005551212
  • From: +14158675310
  • Caller: +14158675310
  • CallSid: CA1234567890ABCDE

  • 全クエリストリングを含む文字列を生成。

    https://mycompany.com/myapp.php?foo=1&bar=2

  • 全てのPOSTパラメータをUnix形式の大文字小文字を区別するソート方法で、アルファベット順に並び替えます。

    • CallSid: CA1234567890ABCDE
    • Caller: +14158675310
    • 数字: 1234
    • From: +14158675310
    • To: +18005551212
  • POSTの各変数、すなわち名前とその値を区切り記号なしの文字列として追加します: > https://mycompany.com/myapp.php?foo=1&bar=2CallSidCA1234567890ABCDECaller+14158675310Digits1234From+14158675310To+18005551212

  • HMAC-SHA1を使用して、AuthToken (プライマリー) をキーとして結果の文字列をハッシュします。 仮にAuthTokenが12345だとしましょう。 下記の関数 (またはお使いの言語で相当するもの) の呼び出しから返されるハッシュ値を取り出します: > hmac_sha1(https://mycompany.com/myapp.php?foo=1&bar=2CallSidCA1234567890ABCDECaller+14158675310Digits1234From+14158675310To+18005551212, 12345)

  • ここでハッシュ値のBase64エンコーディングを取り出します (ASCII文字のみが含まれます): > GvWf1cFY/Q7PnoempGyD5oXAezc==

  • このハッシュを、Twilioから送られたHTTPヘッダの X-Twilio-Signature と比較します。 一致しましたね。

以下は、ヘルプライブラリからの例です。:

コードサンプルを読み込んでいます...
Language
SDKバージョン:
  • 5.x
SDKバージョン:
  • 6.x
  • 7.x
SDKバージョン:
  • 2.x
  • 3.x
SDKバージョン:
  • 4.x
  • 5.x
SDKバージョン:
  • 5.x
  • 6.x
SDKバージョン:
  • 4.x
  • 5.x
// Get twilio-node from twilio.com/docs/libraries/node
const client = require('twilio');

// Your Auth Token from twilio.com/console
const authToken = '12345';

// The Twilio request URL
const url = 'https://mycompany.com/myapp.php?foo=1&bar=2';

// The post variables in Twilio's request
const params = {
  CallSid: 'CA1234567890ABCDE',
  Caller: '+14158675310',
  Digits: '1234',
  From: '+14158675310',
  To: '+18005551212',
};

// The X-Twilio-Signature header attached to the request
const twilioSignature = 'GvWf1cFY/Q7PnoempGyD5oXAezc=';

console.log(client.validateRequest(authToken, twilioSignature, url, params));
// Get twilio-node from twilio.com/docs/libraries/node
const client = require('twilio');

// Your Auth Token from twilio.com/console
const authToken = '12345';

// The Twilio request URL
const url = 'https://mycompany.com/myapp.php?foo=1&bar=2';

// The post variables in Twilio's request
const params = {
  CallSid: 'CA1234567890ABCDE',
  Caller: '+14158675310',
  Digits: '1234',
  From: '+14158675310',
  To: '+18005551212',
};

// The X-Twilio-Signature header attached to the request
const twilioSignature = 'GvWf1cFY/Q7PnoempGyD5oXAezc=';

console.log(client.validateRequest(authToken, twilioSignature, url, params));
<?php

// Your auth token from twilio.com/user/account
$authToken = '12345';

// Download the twilio-php library from twilio.com/docs/php/install, include it
// here
require_once('/path/to/twilio-php/Services/Twilio.php');
$validator = new Services_Twilio_RequestValidator($authToken);

// The Twilio request URL. You may be able to retrieve this from
// $_SERVER['SCRIPT_URI']
$url = 'https://mycompany.com/myapp.php?foo=1&bar=2';

// The post variables in the Twilio request. You may be able to use
// $postVars = $_POST
$postVars = array(
    'CallSid' => 'CA1234567890ABCDE',
    'Caller' => '+14158675310',
    'Digits' => '1234',
    'From' => '+14158675310',
    'To' => '+18005551212'
);

// The X-Twilio-Signature header - in PHP this should be
// $_SERVER["HTTP_X_TWILIO_SIGNATURE"];
$signature = 'GvWf1cFY/Q7PnoempGyD5oXAezc=';

if ($validator->validate($signature, $url, $postVars)) {
    echo "Confirmed to have come from Twilio.";
} else {
    echo "NOT VALID. It might have been spoofed!";
}
# Get twilio-ruby from twilio.com/docs/ruby/install
require 'rubygems' # This line not needed for ruby > 1.8
require 'twilio-ruby'

# Get your Auth Token from https://www.twilio.com/console
auth_token = '12345'
validator = Twilio::Util::RequestValidator.new(auth_token)

url = 'https://mycompany.com/myapp.php?foo=1&bar=2'
params = {
  'CallSid' => 'CA1234567890ABCDE',
  'Caller'  => '+14158675310',
  'Digits'  => '1234',
  'From'    => '+14158675310',
  'To'      => '+18005551212'
}
# The X-Twilio-Signature header attached to the request
twilio_signature = 'GvWf1cFY/Q7PnoempGyD5oXAezc='

print(validator.validate(url, params, twilio_signature))
// Download the twilio-csharp library from
// https://www.twilio.com/docs/libraries/csharp#installation
using System;
using System.Collections.Generic;
using Twilio.Security;

class Example
{
    static void Main(string[] args)
    {
        // Your Auth Token from twilio.com/console
        const string authToken = "12345";

        // Initialize the validator
        var validator = new RequestValidator(authToken);

        // The Twilio request URL
        const string url = "https://mycompany.com/myapp.php?foo=1&bar=2";

        // The X-Twilio-Signature header attached to the request
        const string twilioSignature = "GvWf1cFY/Q7PnoempGyD5oXAezc=";

        var parameters = new Dictionary<string, string>
        {
            {"CallSid", "CA1234567890ABCDE"},
            {"Caller", "+14158675310"},
            {"Digits", "1234"},
            {"From", "+14158675310"},
            {"To", "+18005551212"}
        };

        Console.WriteLine(validator.Validate(url, parameters, twilioSignature));
    }
}
<?php
// NOTE: This example uses the next generation Twilio helper library - for more
// information on how to download and install this version, visit
// https://www.twilio.com/docs/libraries/php
require_once '/path/to/vendor/autoload.php';

use Twilio\Security\RequestValidator;

// Your auth token from twilio.com/user/account
$token = "12345";

// The X-Twilio-Signature header - in PHP this should be
// $_SERVER["HTTP_X_TWILIO_SIGNATURE"];
$signature = 'GvWf1cFY/Q7PnoempGyD5oXAezc=';

// Initialize the validator
$validator = new RequestValidator($token);

// The Twilio request URL. You may be able to retrieve this from
// $_SERVER['SCRIPT_URI']
$url = 'https://mycompany.com/myapp.php?foo=1&bar=2';

// The post variables in the Twilio request. You may be able to use
// $postVars = $_POST
$postVars = array(
    'CallSid' => 'CA1234567890ABCDE',
    'Caller' => '+14158675310',
    'Digits' => '1234',
    'From' => '+14158675310',
    'To' => '+18005551212'
);

if ($validator->validate($signature, $url, $postVars)) {
    echo "Confirmed to have come from Twilio.";
} else {
    echo "NOT VALID. It might have been spoofed!";
}
# Download the twilio-python library from twilio.com/docs/python/install
from twilio.util import RequestValidator

# Your Auth Token from twilio.com/user/account
auth_token = '12345'

validator = RequestValidator(auth_token)

url = 'https://mycompany.com/myapp.php?foo=1&bar=2'
params = {
    'CallSid': 'CA1234567890ABCDE',
    'Caller': '+14158675310',
    'Digits': '1234',
    'From': '+14158675310',
    'To': '+18005551212'
}

# The X-Twilio-Signature header attached to the request
twilio_signature = 'GvWf1cFY/Q7PnoempGyD5oXAezc='

print(validator.validate(url, params, twilio_signature))
# Get twilio-ruby from twilio.com/docs/ruby/install
require 'rubygems' # This line not needed for ruby > 1.8
require 'twilio-ruby'

# Get your Auth Token from https://www.twilio.com/console
auth_token = '12345'
validator = Twilio::Security::RequestValidator.new(auth_token)

url = 'https://mycompany.com/myapp.php?foo=1&bar=2'
params = {
  'CallSid' => 'CA1234567890ABCDE',
  'Caller'  => '+14158675310',
  'Digits'  => '1234',
  'From'    => '+14158675310',
  'To'      => '+18005551212'
}
# The X-Twilio-Signature header attached to the request
twilio_signature = 'GvWf1cFY/Q7PnoempGyD5oXAezc='

print(validator.validate(url, params, twilio_signature))
// Install the Java helper library from twilio.com/docs/java/install
import java.util.HashMap;
import java.util.Map;

import com.twilio.sdk.TwilioUtils;

public class Example {
  public static void main(String[] args) {
    // Your Auth Token from twilio.com/user/account
    String authToken = "12345";

    // Initialize the validator
    TwilioUtils validator = new TwilioUtils(authToken);

    // The Twilio request URL
    String url = "https://mycompany.com/myapp.php?foo=1&bar=2";

    // The post variables in Twilio's request
    Map<String, String> params = new HashMap<>();
    params.put("CallSid", "CA1234567890ABCDE");
    params.put("Caller", "+14158675310");
    params.put("Digits", "1234");
    params.put("From", "+14158675310");
    params.put("To", "+18005551212");

    // The X-Twilio-Signature header attached to the request
    String twilioSignature = "GvWf1cFY/Q7PnoempGyD5oXAezc=";

    System.out.println(validator.validateRequest(twilioSignature, url, params));
  }
}
# Download the twilio-python library from twilio.com/docs/python/install
from twilio.request_validator import RequestValidator

# Your Auth Token from twilio.com/user/account
auth_token = '12345'

validator = RequestValidator(auth_token)

url = 'https://mycompany.com/myapp.php?foo=1&bar=2'
params = {
    'CallSid': 'CA1234567890ABCDE',
    'Caller': '+14158675310',
    'Digits': '1234',
    'From': '+14158675310',
    'To': '+18005551212'
}

# The X-Twilio-Signature header attached to the request
twilio_signature = 'GvWf1cFY/Q7PnoempGyD5oXAezc='

print(validator.validate(url, params, twilio_signature))
// Install the Java helper library from twilio.com/docs/java/install
import java.util.HashMap;
import java.util.Map;

import com.twilio.security.RequestValidator;

public class Example {
  public static void main(String[] args) {
    // Your Auth Token from twilio.com/user/account
    String authToken = "12345";

    // Initialize the validator
    RequestValidator validator = new RequestValidator(authToken);

    // The Twilio request URL
    String url = "https://mycompany.com/myapp.php?foo=1&bar=2";

    // The post variables in Twilio's request
    Map<String, String> params = new HashMap<>();
    params.put("CallSid", "CA1234567890ABCDE");
    params.put("Caller", "+14158675310");
    params.put("Digits", "1234");
    params.put("From", "+14158675310");
    params.put("To", "+18005551212");

    // The X-Twilio-Signature header attached to the request
    String twilioSignature = "GvWf1cFY/Q7PnoempGyD5oXAezc=";

    System.out.println(validator.validate(url, params, twilioSignature));
  }
}
リクエストの署名を検証する

私たちは、署名の検証を行うためにヘルパーライブラリを使用することを強くお勧めします。ライブラリがどのように動作しているのか興味がある場合、以下のPHPサンプルを実行してみてください。

<?php

    // Your auth token from twilio.com/user/account
    $authToken = '456bef';

    public function computeSignature($url, $data = array()) {
        // sort the array by keys
        ksort($data);

        // append the data array to the url string, with no delimiters
        foreach ($data as $key => $value) {
            $url = $url . $key . $value;
        }

        // This function calculates the HMAC hash of the data with the key
        // passed in
        // Note: hash_hmac requires PHP 5 >= 5.1.2 or PECL hash:1.1-1.5
        // Or http://pear.php.net/package/Crypt_HMAC/
        $hmac = hash_hmac("sha1", $url, $authToken, true);
        return base64_encode($hmac);
    }

備考

  • ハッシュを作成する際は、必ず自分のプライマリー AuthToken を鍵として使用します。セカンダリー AuthToken が最近作成されたものである場合、セカンダリー AuthToken がプライマリー AuthToken に昇格するまでは、古い方の AuthToken を使う必要があります。
  • HTTP越しのSMSおよび音声通話のコールバックの場合、Twilioは署名の演算を行う前に (存在する場合は) ユーザー名とパスワードを欠落させます。 HTTPS越しのSMSおよび音声通話のコールバックの場合、Twilioは署名の演算を行う前に (存在する場合は) ユーザー名とパスワード、そしてポートを欠落させます。 この動作仕様は、2008/8/1 ~ 2010/4/1 までのAPIバージョンで作成された既存のコードとの互換性を保つために残してあります。 仕様と一貫性がないことは重々承知しており、ご不自由をお掛けすることをお詫びいたします。
  • HMAC-SHA1アルゴリズムは、コアやエクステンションまたはパッケージを経由することで、ほとんどの言語でご利用いただけます。
  • もしそのURLが index.php や index.html といったインデックスページへ処理を渡す場合、例えば、https://mycompany.com/twilio でアクセスした際に、実際には https://mycompany.com/twilio/index.php が返るような場合、Apache や PHP が、URLの最後を https://mycompany.com/twilio/ のように、スラッシュで書き換えている可能性があります。 前述のヘルプライブラリからの例で紹介したコードや、他の言語で似たようなコードを組んだ場合、これに起因して違うハッシュ値を返すことになります。なぜなら、Twilio は https://mycompany.com/twilio というURLを使ってハッシュを作りますが、ユーザ側では https://mycompany.com/twilio/ でハッシュを作ることになるからです。

ヘルプライブラリを用いた認証

全ての Twilioヘルプライブラリ は、認証リクエストを簡単に扱うためのユーティリティクラスを実装しています。 ヘルプライブラリ のページからお使いの言語に合わせたライブラリをダウンロードしてください。

Auth Token

Auth Token は安全に保管してください。 REST API へのアクセスを可能にするだけではなく、署名のリクエストにも使えるからです。

ヘルプが必要ですか?

誰しもが一度は考える「コーディングって難しい」。そんな時は、お問い合わせフォームから質問してください。 または、Stack Overflow でTwilioタグのついた情報から欲しいものを探してみましょう。

コードサンプルを読み込んでいます...
SDKバージョン:
  • 5.x
SDKバージョン:
  • 6.x
  • 7.x
SDKバージョン:
  • 2.x
  • 3.x
SDKバージョン:
  • 4.x
  • 5.x
SDKバージョン:
  • 5.x
  • 6.x
SDKバージョン:
  • 4.x
  • 5.x
// Get twilio-node from twilio.com/docs/libraries/node
const client = require('twilio');

// Your Auth Token from twilio.com/console
const authToken = '12345';

// The Twilio request URL
const url = 'https://mycompany.com/myapp.php?foo=1&bar=2';

// The post variables in Twilio's request
const params = {
  CallSid: 'CA1234567890ABCDE',
  Caller: '+14158675310',
  Digits: '1234',
  From: '+14158675310',
  To: '+18005551212',
};

// The X-Twilio-Signature header attached to the request
const twilioSignature = 'GvWf1cFY/Q7PnoempGyD5oXAezc=';

console.log(client.validateRequest(authToken, twilioSignature, url, params));
// Get twilio-node from twilio.com/docs/libraries/node
const client = require('twilio');

// Your Auth Token from twilio.com/console
const authToken = '12345';

// The Twilio request URL
const url = 'https://mycompany.com/myapp.php?foo=1&bar=2';

// The post variables in Twilio's request
const params = {
  CallSid: 'CA1234567890ABCDE',
  Caller: '+14158675310',
  Digits: '1234',
  From: '+14158675310',
  To: '+18005551212',
};

// The X-Twilio-Signature header attached to the request
const twilioSignature = 'GvWf1cFY/Q7PnoempGyD5oXAezc=';

console.log(client.validateRequest(authToken, twilioSignature, url, params));
<?php

// Your auth token from twilio.com/user/account
$authToken = '12345';

// Download the twilio-php library from twilio.com/docs/php/install, include it
// here
require_once('/path/to/twilio-php/Services/Twilio.php');
$validator = new Services_Twilio_RequestValidator($authToken);

// The Twilio request URL. You may be able to retrieve this from
// $_SERVER['SCRIPT_URI']
$url = 'https://mycompany.com/myapp.php?foo=1&bar=2';

// The post variables in the Twilio request. You may be able to use
// $postVars = $_POST
$postVars = array(
    'CallSid' => 'CA1234567890ABCDE',
    'Caller' => '+14158675310',
    'Digits' => '1234',
    'From' => '+14158675310',
    'To' => '+18005551212'
);

// The X-Twilio-Signature header - in PHP this should be
// $_SERVER["HTTP_X_TWILIO_SIGNATURE"];
$signature = 'GvWf1cFY/Q7PnoempGyD5oXAezc=';

if ($validator->validate($signature, $url, $postVars)) {
    echo "Confirmed to have come from Twilio.";
} else {
    echo "NOT VALID. It might have been spoofed!";
}
# Get twilio-ruby from twilio.com/docs/ruby/install
require 'rubygems' # This line not needed for ruby > 1.8
require 'twilio-ruby'

# Get your Auth Token from https://www.twilio.com/console
auth_token = '12345'
validator = Twilio::Util::RequestValidator.new(auth_token)

url = 'https://mycompany.com/myapp.php?foo=1&bar=2'
params = {
  'CallSid' => 'CA1234567890ABCDE',
  'Caller'  => '+14158675310',
  'Digits'  => '1234',
  'From'    => '+14158675310',
  'To'      => '+18005551212'
}
# The X-Twilio-Signature header attached to the request
twilio_signature = 'GvWf1cFY/Q7PnoempGyD5oXAezc='

print(validator.validate(url, params, twilio_signature))
// Download the twilio-csharp library from
// https://www.twilio.com/docs/libraries/csharp#installation
using System;
using System.Collections.Generic;
using Twilio.Security;

class Example
{
    static void Main(string[] args)
    {
        // Your Auth Token from twilio.com/console
        const string authToken = "12345";

        // Initialize the validator
        var validator = new RequestValidator(authToken);

        // The Twilio request URL
        const string url = "https://mycompany.com/myapp.php?foo=1&bar=2";

        // The X-Twilio-Signature header attached to the request
        const string twilioSignature = "GvWf1cFY/Q7PnoempGyD5oXAezc=";

        var parameters = new Dictionary<string, string>
        {
            {"CallSid", "CA1234567890ABCDE"},
            {"Caller", "+14158675310"},
            {"Digits", "1234"},
            {"From", "+14158675310"},
            {"To", "+18005551212"}
        };

        Console.WriteLine(validator.Validate(url, parameters, twilioSignature));
    }
}
<?php
// NOTE: This example uses the next generation Twilio helper library - for more
// information on how to download and install this version, visit
// https://www.twilio.com/docs/libraries/php
require_once '/path/to/vendor/autoload.php';

use Twilio\Security\RequestValidator;

// Your auth token from twilio.com/user/account
$token = "12345";

// The X-Twilio-Signature header - in PHP this should be
// $_SERVER["HTTP_X_TWILIO_SIGNATURE"];
$signature = 'GvWf1cFY/Q7PnoempGyD5oXAezc=';

// Initialize the validator
$validator = new RequestValidator($token);

// The Twilio request URL. You may be able to retrieve this from
// $_SERVER['SCRIPT_URI']
$url = 'https://mycompany.com/myapp.php?foo=1&bar=2';

// The post variables in the Twilio request. You may be able to use
// $postVars = $_POST
$postVars = array(
    'CallSid' => 'CA1234567890ABCDE',
    'Caller' => '+14158675310',
    'Digits' => '1234',
    'From' => '+14158675310',
    'To' => '+18005551212'
);

if ($validator->validate($signature, $url, $postVars)) {
    echo "Confirmed to have come from Twilio.";
} else {
    echo "NOT VALID. It might have been spoofed!";
}
# Download the twilio-python library from twilio.com/docs/python/install
from twilio.util import RequestValidator

# Your Auth Token from twilio.com/user/account
auth_token = '12345'

validator = RequestValidator(auth_token)

url = 'https://mycompany.com/myapp.php?foo=1&bar=2'
params = {
    'CallSid': 'CA1234567890ABCDE',
    'Caller': '+14158675310',
    'Digits': '1234',
    'From': '+14158675310',
    'To': '+18005551212'
}

# The X-Twilio-Signature header attached to the request
twilio_signature = 'GvWf1cFY/Q7PnoempGyD5oXAezc='

print(validator.validate(url, params, twilio_signature))
# Get twilio-ruby from twilio.com/docs/ruby/install
require 'rubygems' # This line not needed for ruby > 1.8
require 'twilio-ruby'

# Get your Auth Token from https://www.twilio.com/console
auth_token = '12345'
validator = Twilio::Security::RequestValidator.new(auth_token)

url = 'https://mycompany.com/myapp.php?foo=1&bar=2'
params = {
  'CallSid' => 'CA1234567890ABCDE',
  'Caller'  => '+14158675310',
  'Digits'  => '1234',
  'From'    => '+14158675310',
  'To'      => '+18005551212'
}
# The X-Twilio-Signature header attached to the request
twilio_signature = 'GvWf1cFY/Q7PnoempGyD5oXAezc='

print(validator.validate(url, params, twilio_signature))
// Install the Java helper library from twilio.com/docs/java/install
import java.util.HashMap;
import java.util.Map;

import com.twilio.sdk.TwilioUtils;

public class Example {
  public static void main(String[] args) {
    // Your Auth Token from twilio.com/user/account
    String authToken = "12345";

    // Initialize the validator
    TwilioUtils validator = new TwilioUtils(authToken);

    // The Twilio request URL
    String url = "https://mycompany.com/myapp.php?foo=1&bar=2";

    // The post variables in Twilio's request
    Map<String, String> params = new HashMap<>();
    params.put("CallSid", "CA1234567890ABCDE");
    params.put("Caller", "+14158675310");
    params.put("Digits", "1234");
    params.put("From", "+14158675310");
    params.put("To", "+18005551212");

    // The X-Twilio-Signature header attached to the request
    String twilioSignature = "GvWf1cFY/Q7PnoempGyD5oXAezc=";

    System.out.println(validator.validateRequest(twilioSignature, url, params));
  }
}
# Download the twilio-python library from twilio.com/docs/python/install
from twilio.request_validator import RequestValidator

# Your Auth Token from twilio.com/user/account
auth_token = '12345'

validator = RequestValidator(auth_token)

url = 'https://mycompany.com/myapp.php?foo=1&bar=2'
params = {
    'CallSid': 'CA1234567890ABCDE',
    'Caller': '+14158675310',
    'Digits': '1234',
    'From': '+14158675310',
    'To': '+18005551212'
}

# The X-Twilio-Signature header attached to the request
twilio_signature = 'GvWf1cFY/Q7PnoempGyD5oXAezc='

print(validator.validate(url, params, twilio_signature))
// Install the Java helper library from twilio.com/docs/java/install
import java.util.HashMap;
import java.util.Map;

import com.twilio.security.RequestValidator;

public class Example {
  public static void main(String[] args) {
    // Your Auth Token from twilio.com/user/account
    String authToken = "12345";

    // Initialize the validator
    RequestValidator validator = new RequestValidator(authToken);

    // The Twilio request URL
    String url = "https://mycompany.com/myapp.php?foo=1&bar=2";

    // The post variables in Twilio's request
    Map<String, String> params = new HashMap<>();
    params.put("CallSid", "CA1234567890ABCDE");
    params.put("Caller", "+14158675310");
    params.put("Digits", "1234");
    params.put("From", "+14158675310");
    params.put("To", "+18005551212");

    // The X-Twilio-Signature header attached to the request
    String twilioSignature = "GvWf1cFY/Q7PnoempGyD5oXAezc=";

    System.out.println(validator.validate(url, params, twilioSignature));
  }
}