Twilioブログ

Twilio Authyを用いた二要素認証(二段階認証)の実装方法

こんにちは、Twilio事業部のkatsu.tです。 本記事では、二要素認証を素早く自分のプロダクトに組み込めるTwilio Authyについてご紹介いたします。

目次

Twilio Authyとは

authy-image

Twilio Authyとは、Twilioが提供している二要素認証の仕組みの一つで、Twilio Authy APIを使用することで二要素認証を簡単に追加できます。電話とSMSを介して送信されるOTP(ワンタイムパスワード)やSoft Token TOTP(時間ベースのワンタイムパスワード)、Authyアプリを介したPush Authentication(プッシュ認証)を提供しています。

Twilio AuthyとTwilio Verifyの違い

Twilio Verifyの最大の特長は、「開発の容易性」です。
わずか10 行足らずのコードを追加するだけで、既存のアプリケーションに二要素認証を組み込むことができ、技術者の開発の負荷を大きく減らすことが可能です。しかし、ユーザーの情報については、サービスを提供されている企業にて保持・運用いただく必要があります。

Twilio Authyは、Twilio Verifyでも使用できる「SMS・音声通話・メール」の認証だけでなく、「Push Authentification」や 「Soft Token TOTP」などの多種多様な認証方法を選択して利用できます。
また、ユーザーの情報も含めてTwilioのプラットフォームで管理を行うので、企業はより運用時のメリットを得られやすくなります。

Twilioが提唱しているユースケース

機能名 ユーザー情報の保持・運用 ユースケース
Twilio Verify サービス提供者 ユーザーのサインアップ、電話番号または電子メールの新規または変更の追加
Twilio Authy Twilio ログイン、支払い、設定の変更などの重要なアクションの繰り返し

Twilio AuthyとTwilio Verifyの推奨の利用方法

Twilio Authyは、二要素認証を行う前にAuthyにユーザーを作成する必要があります。しかし、電話番号やメールアドレスを使ってユーザーを作成する際、実在しない電話番号でもユーザーを作成することが可能です。 そのため、Twilio Verifyを用いて入力された電話番号を認証した後、Authyのユーザー作成を行って二要素認証を運用することをオススメしています。参考ページはこちらをご覧ください。

authy-use-case

Twilio Authyの実装方法

本記事では最もシンプルでわかりやすいSMSを用いた認証の方法をご紹介いたします。 Authy APIを介してSMSを用いた認証を行うためには手順が3つあります。

  1. ユーザー作成
  2. 認証コード送信
  3. コードの認証

こちらの手順をREST APIとLaravel(PHP)を用いてご紹介いたします。 Authy APIの詳細についてはこちらをご覧ください。

事前準備

Twilio Account

Twilioアカウントをまだ作成していない方は、こちらの「無料アカウント作成」よりアカウントの作成をお願いします。

アカウント作成

Authy api key

Authy api keyを取得するには、まずAuthy Applicationを作成する必要があります。 まず、Authy画面を開きます。

All Products & Services

「Create Application」 をクリックし、新しくApplicationを作成します。

authyアプリ作成

FRIENDRY NAMEに適当な名前を入力し、「Create」をクリックします。
※ここで入力したFRIENDRY NAMEがSMS送信した際のアプリケーション名となりますが、後で設定から変更することも可能です。

authyアプリ名

Applicationが作成できた際に開かれる設定画面のPRODUCTION API KEYAuthy api keyです。

authy設定

REST API

ユーザー作成

curl "https://api.authy.com/protected/json/users/new" \
-H "X-Authy-API-Key: AUTHY_API_KEY" \
-d user[email]=email address \
-d user[cellphone]=phone number \
-d user[country_code]=country code
パラメーター名 概要
AUTHY_API_KEY 事前準備で取得したAuthy api key
email address 登録したいユーザーのメールアドレス
phone number 登録したいユーザーの電話番号
先頭の 0 をとった番号
例:09012345678→9012345678
country code 国番号
日本の場合は 81

認証コード送信

curl https://api.authy.com/protected/json/sms/{userId} \
-H "X-Authy-API-Key: AUTHY_API_KEY"
パラメーター名 概要
AUTHY_API_KEY 事前準備で取得したAuthy api key
userId ユーザー作成時に取得できる id
コンソールからも確認可能</a href='https:>

コードの認証

curl https://api.authy.com/protected/json/verify/{smsCode}/{userId} \
-H "X-Authy-API-Key: AUTHY_API_KEY"
パラメーター名 概要
AUTHY_API_KEY 事前準備で取得したAuthy api key
smsCode SMSで送られてき認証コード
userId ユーザー作成時に取得できる id
コンソールからも確認可能

Laravel(PHP)

SDKインストール

$ composer require twilio/sdk

ユーザー作成

use Authy\AuthyApi;

class Verification {
	function create($email,$phone_number,$country_code) {
		// authy_apiの初期化
		$authy_api = new AuthyApi('authy_api_key');
		// ユーザー作成
		$user = $authy_api->registerUser($email,$phone_number,$country_code);

		if($user->ok()) {
			// 作成成功
			printf($user->id());
		} else {
			// 作成失敗
			foreach($user->errors() as $field => $message) {
        	    printf("$field = $message\n");
	        }
		}
	}
}

認証コード送信

use Authy\AuthyApi;
        
class Verification {
	function sendVerificationCodeVoice($authy_id) {
        // authy_apiの初期化
		$authy_api = new AuthyApi('authy_api_key');

		$response = $authyApi->requestSms($authy_id, ['force' => 'true']);
        
		if ($response->ok()) {
           	// 送信成功
        } else {
			// 送信失敗
		}
	}
}

コードの認証

use Authy\AuthyApi;
        
class Verification {
	function verifyToken($authy_id, $token_entered_by_user) {
		// authy_apiの初期化
		$authy_api = new AuthyApi('authy_api_key');

        $token_entered_by_user = '1234567';
		$verification = $authy_api->verifyToken($authy_id, $token_entered_by_user);
                
		if ($verification->ok()) {
			// 認証成功
		}
	}
}

まとめ

Authyでユーザーを作成する際は、実在しない電話番号でもユーザーを登録することが可能です。 そのため、Twilioが提唱しているように、ユーザー登録の際は電話番号が実在するかをVerifyを用いて確認を行い、電話番号の実在が確認できた後、Authyでユーザーを作成して二要素認証の運用を行うのをオススメします。

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

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

Share!!

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