ブログ

マルチチャネルの二要素認証を実装できるTwilio Verifyとは?

こんにちは、Twilioマーケティング部のkatsu.tです。

昨今、セキュリティ向上のために二要素認証の導入が非常に増えてきています。弊社でも多くのお客様より、二要素認証導入時の認証コードの送信方法として「SMSや電話を使いたい」とお問合せいただいております。

本記事では二要素認証の重要性をはじめ、二要素認証チャネルの多様化、複数のチャネルに跨った認証コードの送信方法などについて詳しくご紹介いたします。

Twilio Verifyのデモ動画はこちらから視聴できます。

目次

二要素認証の重要性

そもそも、なぜ近年ではこんなにも二要素認証の導入が進んでいるのでしょうか。

一昔前は数えられるくらいのサービスにしか登録していなかったものの、今ではウェブサービスの多様化・利便化に伴い、数十のサービスに登録している……という方が増えてきています。
そうなるとID(メールアドレス)とパスワードの管理が煩雑になるため、同じものを使いまわしてしまうケースも少なくありません。

昨今ではサイバー犯罪も高度化されており、どこかのサービスで流出した情報をもとに他のサービスでもログインを試みる手法がよく見られます。つまり同じIDとパスワードを複数のサービスで利用している場合、さまざまなサービスで不正にログインされ、アカウントの乗っ取りや不正利用をされる可能性が高くなるのです。

二要素認証とは

そこで登場したのが「二要素認証」という考え方です。
二要素認証は、以下の要素を2つ以上組み合わせた認証のことをいいます。

  • 知識要素(ID、パスワードなどの記憶)
  • 所持要素(スマートフォンなどを持っていること)
  • 生体要素(指紋や顔)

例えば、知識要素の情報が漏れてしまっても、他の要素で情報を保護できると考えられています。

そのため最近では多くのウェブサービスで、知識要素と所持要素を利用した二要素認証が導入されています。

二要素認証の詳細については「二要素認証とは?基礎知識やメリット、二段階認証との違いを解説の記事をご覧ください。

 

二要素認証の多様化

多くのウェブサービスで知識要素と所持要素を組み合わせた認証がおこなわれていますが、その際に問題になるのが「所持要素の多様化」です。

所持要素はユーザーによって使い勝手が異なります。
例えば、弊社では以下のようなケースをよく耳にします。

  • 法人利用するため、個人の電話番号は紐づけられない。メールで認証コードを送ってほしい
  • 重複登録を減らしたいので、電話番号で認証コードを送りたい
  • ユーザビリティ向上のため、プッシュ通知認証をしたい

上記はすべて2要素目の認証をおこなう手段ですが、メール・電話番号(SMS・電話)・アプリと、チャネルが多様化していることがわかります。

サービス提供者の中には、顧客満足度やユーザビリティを考えて、すべてのチャネルを使った手段を検討される方も多いでしょう。しかしチャネルごとにサービスを契約したり、処理の流れを変えたりすることには多大なコストがかかります。結果としてチャネルを絞らざるを得ない、というお悩みをお持ちの方もいらっしゃるのではないでしょうか。

Twilio Verifyについて

Twilio Verifyは、Twilioが提供している二要素認証の仕組みの1つで、認証コードの送信とコードの認証機能を提供しています。
Twilio Verifyを使うことで、自身のプロダクトに素早く二要素認証の機能を組み込めます。

Twilio Verifyの強み

Twilio Verifyの強みは、まずシンプルなAPI構成であることです。

Twilio Verifyは前述の通り、2つのAPI(認証コードを生成・送信するAPI、コードを認証するAPI)で構成されています。
APIの構成が非常に理解しやすく、容易にシステムに組み込むことができます。

またもう一つの強みとして、対応チャネルの多さも挙げられます。
Twilio Verifyは時代に合わせて進化を続けており、最初はSMSと電話でスタートしました。その後メール、プッシュ通知にも対応し、最近ではGoogle Authenticatorなどの認証アプリにも対応しました。

Twilio Verifyで利用できるチャネル

  • 電話
  • SMS
  • WhatsApp
  • メール
  • プッシュ通知
  • 認証アプリ

Twilio Verifyの実装方法

ここからは、Twilio Verifyがどれほど簡単に実装できるか、もっともシンプルに実装できるSMS送信を例にご紹介いたします。
※他のチャネルの実装方法についてはこちらのドキュメントをご確認ください。

TwilioではNode.jsC#PHPPythonJavaRubyのSDKを用意しています。
本記事ではもっともシンプルでわかりやすいREST APIの利用方法とLaravel(PHP)を用いた利用方法、Laravel(PHP)を用いたクイックスタートをご紹介いたします。

事前準備

Account SIDとAuth Tokenの取得

Twilioのコンソールにログインして、Account SIDとAuth Tokenを確認します。

Account SID、Auth Tokenの取得

Service SIDの取得

Verify Serviceを作成します。
まず、Verify画面を開きます。

Service SIDの取得

続いてServices画面を開き、「+」をクリックします。

Service SIDの取得2

Friendly nameを入力して「Create」をクリックします。
このときのFriendly nameが認証コードを送信する際の「Verify service名」になります。

Service SIDの取得3

必要に応じてCode Lengthを修正します。

Service SIDの取得4
設定ができたら「Save」をクリックします。
Service SIDの取得5

最後にService一覧に戻り、Service SIDを確認します。

Service SIDの取得6

REST API

Twilio Verifyは2つのAPIで構成されており、非常にシンプルに利用することが可能です。

認証コードの送信

認証コードを送信する手段は、電話・SMS・Eメールから選べます。
※Eメールを利用する際は、別途SendGridの設定が必要となります。詳しくはこちらをご覧ください。

以下APIを用いて認証コードの送信を行います。

curl -X POST https://verify.twilio.com/v2/Services/{Service SID}/Verifications \
--data-urlencode "To=+81xxxxxxxxx" \
--data-urlencode "Channel=sms" \
-u your_account_sid:your_auth_token

パラメータの設定値はこちらを参考に入力してください。

項目名 概要
{Service SID} 事前準備で取得したVerifyのサービスID
your_account_sid 事前準備で取得したAccount_SID
your_auth_token 事前準備で取得したAuth Token
To 認証コードを送りたい連絡先
電話番号 or メールアドレス
Channel call(電話) or sms(SMS) or email(Eメール)

 

 

 

 

 

 

 

 

認証コードを送信すると、Toに設定した連絡先に以下のような認証コードが届きます。
※本文は「あなたの{Verify service名}認証コード:」という形で送信します。

認証コードの送信

コードの認証

ユーザーに送信されたコードを認証するには以下APIを利用します。

curl -X POST https://verify.twilio.com/v2/Services/{Service SID}/VerificationCheck \
--data-urlencode "To=+81xxxxxxxxx" \
--data-urlencode "Code=123456" \
-u your_account_sid:your_auth_token

パラメータの設定値はこちらを参考に入力してください。

項目名 概要
{Service SID} 事前準備で取得したVerifyのサービスID
your_account_sid 事前準備で取得したAccount_SID
your_auth_token 事前準備で取得したAuth Token
To 認証コードを送った連絡先
電話番号 or メールアドレス
Code ユーザーに送信されたコード

PHP(Laravel)

続いて、Lavavelを用いたSDKのインストール方法と利用方法についてご紹介いたします。

SDKのインストール

$ composer require twilio/sdk

認証コードの送信

以下メソッドを用いて認証コードを送信します。

use Twilio\Rest\Client;

class Verification {
    function sendCode($phone_number, $channel) {
        // clientの初期化
        $client = new Client($account_sid, $auth_token);

        // コードの送信
        $verification = $this->client->verify->v2->services($this->verification_sid)
                ->verifications
                ->create($phone_number,$channel);
    }
}

変数の設定値はこちらを参考に入力してください。

項目名 概要
$service_sid 事前準備で取得したVerifyのサービスID
$account_sid 事前準備で取得したAccount_SID
$auth_token 事前準備で取得したAuth Token
$phone_number 認証コードを送りたい連絡先
電話番号 or メールアドレス
$channel call(電話) or sms(SMS) or email(Eメール)

コードの認証

use Twilio\Rest\Client;

class Verification {
    function checkVerification($phone_number, $code) {
        // clientの初期化
        $client = new Client($account_sid, $auth_token);

        // コードの認証
        $verification_check = $this->client->verify->v2->services($this->verification_sid)
                ->verificationChecks
                ->create($code, ['to' => $phone_number]);
        if($verification_check->status === 'approved') {
            // 認証成功
        } else {
            // 認証失敗
        }
    }
}

変数の設定値はこちらを参考に入力してください。

項目名 概要
$service_sid 事前準備で取得したVerifyのサービスID
$account_sid 事前準備で取得したAccount_SID
$auth_token 事前準備で取得したAuth Token
$phone_number 認証コードを送った連絡先
電話番号 or メールアドレス
$code ユーザーに送信されたコード

クイックスタート

構築

最後にLaravelを使ったクイックスタートをご紹介いたします。

1. ソースコードのダウンロード

gitを利用して、ソースコードをダウンロードします。
gitを利用していない方は、こちらよりソースコードをダウンロードしてください。

$ git clone git@github.com:TwilioDevEd/verify-v2-quickstart-php.git

2. composer installコマンドを使用します。

$ composer install

3. .env.sampleをコピーして、.envを作成します

$ cp .env.example .env

4. アプリケーションキーを作成します。

$ php artisan key:generate

5. .envに事前準備で取得した値を入力します。

TWILIO_ACCOUNT_SID=ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
TWILIO_AUTH_TOKEN=7axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
TWILIO_VERIFICATION_SID=VAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

6. databaseファイルを作成しマイグレーションを行います。

$ touch database/twilio_verify_quickstart.sqlite
$ php artisan migrate

7. アプリケーションを起動します。

php artisan serve

8. http://localhost:8000上で動作を確認します。

動作確認

それでは、http://localhost:8000にアクセスして動作確認してみましょう。
「Register」をクリックして、新規ユーザー作成をおこないます。

verifyでの動作確認方法

続いてUsernamePasswordPhone numberを入力します。Phone numberは国を選択し、電話番号を入力してください。

verifyでの動作確認方法2

SMSが届いたら、認証コードを入力して、「Verify」をクリックします。

verifyでの動作確認方法3

認証ができてログインできるのが確認できます。

verifyでの動作確認方法4

まとめ

Twilio Verifyを利用することで、電話、SMS、メール、プッシュ通知、認証アプリなどさまざまなチャネルを用いた認証が一つのサービスで可能となります。

二要素認証を実装する際はSMSに注目しがちですが、ぜひこれを機に他のチャネルの実装も検討してみるのはいかがでしょうか。

アプリケーションエンジニア 葛 智紀
アプリケーションエンジニア 葛 智紀

前職でiOS、Androidのネイティブアプリケーション開発、AngularやLaravelを用いたウェブアプリケーション開発に従事。KDDIウェブコミュニケーションズではTwilioの最新情報の発信やTwilioを用いた地域課題解決を担当。 個人では、Google Developer Group Tokyoのオーガナイザーを務める。

お問い合わせはこちら

Share!!

  • お役立ち情報
  • イベント情報
  • 相談会申込
  • 導入事例