Twilio VerifyとTwilio Functionsによるサーバーレス電話認証
読む所要時間: 9 分
セキュリティは誰もが気になる項目でしょう。その中で電話認証はアプリケーションの保護やbotアカウントの防止に役立つ簡単な方法と言えます。そのため、ユーザーの電話番号にワンタイムパスワードを送信して所有番号の検証をするやり方は、製品の登録時や電話番号の初回登録時によく使われる方法です。
ユーザーの電話番号を確認することで、不正の低減や通知の信頼性を高められます。今回は、TwilioのサーバーレスファンクションとTwilio Verify APIを使用してWebアプリケーションから電話番号を検証する方法を紹介します。
クイックリンク:
- Twilio Code Exchangeを使用し、2分ほどでサンプルアプリケーションを配備
- GitHubコード
Twilio Verifyをアプリケーションに追加するための前提条件
この記事に沿ってコーディングを行う際に必要なもの:
- Twilioアカウント
- Twilio CLI - インストール手順
- Twilioコンソールで作成可能なVerifyサービス - この記事ではサービスの名前を「Serverless Phone Verification」(サーバーレス電話認証)と設定
Twilioコンソールで作成したVerifyサービスのService SID(先頭がVA)を控えておきます。
Twilioを利用する場合、APIキーが漏洩する可能性を避けるため、キーを直接フロントエンドアプリケーションに格納しないようにします。通常はセキュリティ強化のためにバックエンドサーバーを使用しそこでVerify APIと通信を行います。今回はバックエンドサーバーとしてTwilio Functionsを使用します。
使用しているOS用のTwilio CLIをインストールし、Twilioアカウントにログインします。
次に、サーバーレスツールキットをインストールします。このツールキットを用いることにより認証テンプレートの複製やプロジェクトの配備が簡単に行えます。
新規プロジェクトを開始します(Verifyファンクションテンプレートを使用)。
付属の.env
ファイルを編集し、VERIFY_SERVICE_SID
に値を設定します。(コンソールでVerifyサービスを検索/作成)。また、ACCOUNT_SID
とAUTH_TOKEN
の値が入力されていることを確認します。これらの値はtwilio login
を実行すると、サーバーレスツールキットにより設定されます。結果、.env
ファイルは次のようになります。
アプリケーションのローカル実行とテスト
アプリケーションをローカルで起動します。
ブラウザーでhttp://localhost:3000/index.htmlを表示し、ユーザー認証アプリケーションを確認してください。
SMSを選択して電話番号を入力します。ボタンをクリックすると入力した電話番号に認証コードが送られます。アプリケーション側で送られてきたコードを入力し、正しければ認証の成功が伝えられます。
Twilio Verifyの機能
今回のプロジェクトには、認証の開始と確認を行う2つの関数が含まれます。
- 最初にstart関数からエンドユーザーの電話、あるいはメールアドレスに、ワンタイムパスコード(OTP)を送ります。Twilio VerifyがOTPの生成を処理するため、通知方法を選択するだけで済みます。
- 次にcheck関数にて、OTPがユーザー宛に送信したものと同じであることを検証します。これもTwilio VerifyがOTPの保存と検証を処理するため、独自に実装する必要はありません。
認証のstart関数は次のとおりです。
この関数でユーザーに対して認証を開始します。この際、チャネルとロケールは画面で指定したものが使用されます。チャネルはsms
、call
、email
*のいずれかを選択できます。また、ロケールにより認証に使用する言語が決まります。サポートされる言語についてはこちらで確認できます。
*注: メールを使用する場合は追加の設定が必要です。こちらの手順でメール送信のVerifyサービスを設定します。
認証のcheck関数は次のとおりです。
この関数からVerificationCheckエンドポイントが呼び出され、ステータスがapproved
であるかどうかを確認されます。認証コードが正しくない場合、応答のstatus
はpending
となります。
Twilioサーバーレス関数の展開
前述のようにテンプレートのUIからVerify APIの機能を体験できますが、バックエンドに実装されている2つの関数は長期的に使用でき、本番環境でも使用できます。もしこの関数をサーバーレス実行環境に配備する場合は次のコマンドを使用します。
配備後、verify-sample-1234-dev.twil.io
のようにプレフィックスが3つ付いたURLが表示されます(実際の表記は環境によって異なります)。表示されたindexファイル(Assets以下のURL)にアクセスし、再び認証をテストします。
もし実装されているコードをローカル環境で変更した場合は、再度twilio serverless:deploy
コマンドを実行し、関数を更新してください。配備された関数は既存のアプリケーションから使用し、認証の送信と確認に利用できます。
次のステップ
今回は2つのAPI呼び出しと1つのWebページだけでユーザーが実際の電話番号/メールアドレスを所有していることを検証し、該当する連絡チャネルへのアクセスを確認しました。この方式を利用することで多くの不正アカウントを防止し、連絡先の確認を取ることができ、さらに許可を得ているユーザーに対してアプリケーションからテキストや音声の通知を確実に送れます。
今回の記事で使用したサンプルはGitHubのコードを利用するか、独自にTwilio Code Exchangeを使用して2分足らずで配備できます。ユーザー認証やアカウントセキュリティについて不明な点があれば、コメントまたはTwitterでお知らせください。