https://a.storyblok.com/f/270183/1368x665/88b65ff8a9/firebase_multi-auth.png

Vonage APIとFirebaseで多要素認証を改善する

最終更新日 September 5, 2024

所要時間:2 分

この記事の最終更新日:2026年3月4日

はじめに

このブログポストでは、VonageのIdentity Insights APIを使用して多要素認証を改善する方法を紹介します。 アイデンティティインサイトAPI、SIMスワップインサイトおよび Verify API.また、Firebase Services を使用して関数を保存します。 クラウドファンクションのデータを クラウド・ファイアーストアデータベース、そして Firebase ホスティング.

アプリケーションのソースコードは、私たちの GitHub リポジトリ.

注:このブログポストでは、Firebase Services を既存の Verify APIとSIM Swap Insightで多要素認証を改善する.このチュートリアルでは、Express を使用したサーバーの作成と、クラウドへのデプロイの両方について説明します。この前のブログ記事と GitHub リポジトリを参照してください。

前提条件

  • Vonage開発者アカウント

  • Node.jsとnpmがマシンにインストールされている

  • Firebase プロジェクトは Firebase コンソール(私はaccount-recovery-demoと名付けました)

  • ファイアベースCLIインストール済み

  • コード/テキストエディタ

Vonage API Account

To complete this tutorial, you will need a Vonage API account. If you don’t have one already, you can sign up today and start building with free credit. Once you have an account, you can find your API Key and API Secret at the top of the Vonage API Dashboard.

概要図とアプリケーション・アーキテクチャ

この Account Recovery チュートリアルでは、ユーザーが Web フロントエンド ページにアクセスしてログイン、パスワードのリセット、本人確認を行う方法を説明します。このページは Firebase Functions バックエンドと連動し、Firebase Cloud Firestore にユーザー認証情報を保存、取得します。

ユーザーがパスワードをリセットしようとすると、Vonage Verify API によって生成された確認用ワンタイム・コードが送信されます。ただし、この確認は、Vonage Identity Insights API SIM Swap insight を使用して SIM Swap の詳細が通信サービスプロバイダに確認された場合にのみ行われる。

The application follows a client-server architecture. The client handles user interactions through HTML and JavaScript, including entering phone numbers and submitting verification codes. The client and the server communicate via GET / POST requests.   The server, developed in Node.js with Express, manages backend logic, including interfacing with Vonage’s SIM Swap and Verify v2 APIs for security checks and authentication.   Firebase Hosting serves the web application, Firebase Functions handle server-side logic, and Firestore stores user data and verification status.Overview Diagramこのアプリケーションは、クライアント・サーバー・アーキテクチャーに従っている。クライアントは、電話番号の入力や認証コードの送信など、HTMLとJavaScriptを通じてユーザーとのやり取りを処理します。Firebase Hosting がウェブアプリケーションを提供し、Firebase Functions がサーバーサイドのロジックを処理し、Firestore がユーザーデータと検証ステータスを保存します。

クラウドファンクション・プロジェクトの立ち上げ方

以前は Expressアプリは、サーバー環境内でルートとAPIコールを直接管理していた。.Firebase Cloud Functions を使用すると、Express アプリで定義済みの各エンドポイントは Firebase.jsonファイルでルールを書き換えることで、特定のクラウド関数にマッピングされます。このセットアップにより、ルーティングメカニズムがアプリケーションロジックから切り離され、各ファンクションが独立して拡張・管理できるようになります。Firebase は自動的にリクエストを処理し、以下のような書き換えルールに基づいて適切なクラウドファンクションに誘導する。 送信コードsendCodeまたは /ログインログイン.ウェブクライアントはサーバーとは異なるドメインに存在するため、CORS(Cross-Origin Resource Sharing)も使用しています。

プロジェクトの設定方法

このプロジェクトは、お気に入りのコーディング・エディターを使って作業することができる。私の場合は、Visual Studio Codeと Firebase Studioは Firebase プロジェクトをサポートしているので、簡単に開発できます。好きなエディタを使ってください!

  1. まずは GitHub リポジトリ.

  2. 必要な依存関係をインストールします: npm install.

Firebaseの設定方法

以下はプロジェクトをセットアップする手順です。 Firebase プロジェクトは、Firebase コンソールまたはコマンドラインから作成できます。.使用するFirebaseサービスは、関数、ホスティング、Firestoreです。

  • コンソールで、新しいプロジェクトを作成するをクリックし、名前を付けて、続けるをクリックする。

  • アナリティクスを使用するかどうかを選択します。

  • プロジェクトが作成されるのを待つ。

  • ギア ->利用状況と課金->詳細と設定をBlazeに設定します(従量課金プランはサードパーティAPIを使用する必要があります)。

  • Google Cloudリソースの場所を -> プロジェクトの設定.

Firebase デプロイターゲットの設定方法

では デプロイ目標を設定しよう.プロジェクトフォルダーに .firebasercファイルを作成し、'PROJECT_ID'をプロジェクトIDで更新する。フォルダ内に .firebaserc.exampleファイルがあります。

// .firebaserc

{

  "projects": {

    "default": "PROJECT_ID"

  }

}

環境変数の設定

プロジェクトに環境変数を追加する時が来た。

以下から /ファイルからファイルから /functions/.envファイルを作成し、以下の環境変数をインクルードする:

# .env

VONAGE_API_KEY=your_api_key VONAGE_API_SECRET=your_api_secret VONAGE_APPLICATION_ID=your_application_id VONAGE_APPLICATION_PRIVATE_KEY=/path/to/your/private.key
PERIOD=72

メモ シークレットマネージャーは環境変数をインポートする安全な方法です。このチュートリアルでは Firebase 用 Cloud Functions は dotenv をサポートしています。.

Firebaseエミュレータを使ってローカルでテストする方法

ローカルでテストする場合は Firebase ローカルエミュレータスイート.

  1. エミュレータを初期化する firebase init emulators.

  2. エミュレータを起動する firebase emulators:start.

  3. コマンドラインにローカルのWebアプリケーションとFirestoreインスタンスを開くためのURLが記載されています。両方のページを開き、Firestoreインスタンスに入力します。これはローカルのFirestoreインスタンスであることを忘れないでください。そのため、クラウドコンソールの実際のプロジェクトで確認できるものとは異なります。

注:このプロジェクトでは、エミュレーターのポート5001とFirestoreのポート8080を見つけるために、それらを firebase.jsonポート5001でエミュレーターを、ポート8080でFirestoreを見つけられるように。

ウェブアプリケーションをデプロイして試す

Firebaseホスティングでのデプロイ方法

静的ファイル(HTML、CSS、JavaScript)をFirebaseホスティングにデプロイします。Firebase CLI がプロジェクトにインストールされ、初期化されていることを確認してください。以下のコマンドを実行してデプロイします:

firebase deploy --only hosting

コマンドラインでHTMLページが生成されるのがわかるだろう。私の例では、プロジェクトIDは' account-recovery-demo'で、生成されたURLは'https://account-recovery-demo.web.app'.あなたのも開いてみてください!

Firebase用クラウド機能

Firebase Functions を使用してサーバーサイドロジックをデプロイします。プロジェクトに Firebase CLI がインストールされ、初期化されていることを確認します。以下のコマンドを実行してデプロイします:

firebase deploy --only functions

Firebaseのコンソールで プロジェクトのプロジェクトの'functions'タブを開くと、4つの関数を見つけることができます: sendCode, login, verifyそして simSwap.バージョン管理やログのチェックが必要な場合は、作成された各関数に対して行うことができます。

Firebase Cloud Firestore データベース

Firestore を使用して、ユーザーデータと検証ステータスを保存します。credentials」コレクションを作成し、Firestoreフィールドにcredentialsノードを入力します。

パスワード、電話番号、request_id、ユーザ名という文字列型フィールドを含む各イベントノードを作成します。この例では、これらの機密フィールドを Firestore に保存しています。実際のアプリケーションでは、これらは例えば シークレットマネージャー.

A screenshot showing a collection created with one entry containing the fields password, phone_number, request_id, and usernameCloud Firestore Database Instance

試してみる

Firebaseホスティングを使ってデプロイしたウェブアプリケーションにアクセスする時が来た。

パスワードを忘れたとします。パスワードを忘れた場合」をクリックして、パスワードの復旧を開始します。電話番号を入力し、認証を要求するプロンプトが表示されます。

アプリケーションが最近のSIM交換を検出すると、警告がポップアップ表示されます: 警告!警告!ユーザーのモバイルアカウントに関連するSIMペアリングの変更が最近発生しました。続行しますか?スワップを行ったのがあなたではなく、「いいえ、私ではありません」を選択した場合、あなたの番号で詐欺が行われている可能性があります。これは、携帯電話会社に確認する合図です。

注:チュートリアルのデモでは、SIMカードを入れ替えたことを確認するよう求め られているが、実際のシナリオでは、ユーザーはサービス・プロバイダーに直接 連絡して、追加のIDチェックを受けることになるだろう。同様に、このアプローチはログイン時の多要素認証にも適用でき、ワンタイムトークンを送信する前にチェックが行われる。最近の SIM 交換が検出された場合、ユーザーはサービス・プロバイダに直接連絡して、追加の ID チェックを受けることができる。

一方、SIMを入れ替えて、『はい、私です。 はい、私ですを選択した場合、アプリはVerify APIを使ってあなたの携帯電話に認証コードを送信します。次の画面でこのコードを入力し、新しいパスワードを設定する。それが完了したら、新しい認証情報を使ってシミュレーションした銀行口座にログインできる。

結論

このチュートリアルはここまでです。本日は、Web アプリケーションに Firebase Services を追加することで、多要素アプリケーションを改善する方法について説明しました。

ご質問がある場合、またはあなたが作っているものを共有したい場合は、こちらをクリックしてください。

最新の開発者向けニュース、ヒント、イベント情報をお届けします。

その他のリソース

シェア:

https://a.storyblok.com/f/270183/400x400/3f6b0c045f/amanda-cavallaro.png
Amanda Cavallaroデベロッパー・アドボケイト