2025/10/15

Auth0機能

Auth0とNTT CPaaSで実現する多要素認証

デジタル化が加速する現代において、セキュリティとユーザビリティの両立は企業にとって重要な課題です。特に、サイバー攻撃の巧妙化が進む中、パスワードだけでの認証には限界があり、より強固な認証が求められています。

そこで本記事では、顧客IDの認証・認可に必要となる機能をクラウドサービスとして提供するAuth0と、様々なコミュニケーションチャネルを提供するNTT CPaaSを組み合わせ、いかにしてセキュリティの強化を実現させるか紹介します。

想定する要件

本記事では下記の要件を想定しています。

  • ・SMSまたはVoice(音声通話)による多要素認証を導入しセキュリティを向上させたい
  • ・日本国内向けにサービスを提供しており高い品質を担保したい

対応方法

Auth0では多要素認証の電話メッセージ送信プロバイダとして、「デフォルト」を選択可能ですが、メッセージの上限数が100となるため本番利用は想定されていません。SMSやVoiceによる多要素認証を導入する場合は、電話メッセージ送信プロバイダの用意が必要です。

本記事では、日本国内において安定した通信品質を確保し高い到達率とスループットを提供し、かつ、日本語にも対応しているNTT CPaaSを利用し多要素認証を実現します。

実装手順

2025年の7月にAuth0管理画面の多要素認証設定部分に仕様変更が入りました。仕様変更前に作成した旧テナントと、それ以降に作成した新テナントで多要素認証の実装手順が異なるため、本記事では、それぞれの実装手順について紹介します。

実装準備

本実装手順は、NTT CPaaSの契約があることを前提としており、下記のNTT CPaaS接続情報が必要となります。該当の接続情報については下記のインストールガイドに従い確認してください。

NTT CPaaS接続情報)

  • ・API key
  • ・base URL
  • ・SMS sender phone number(※SMSを利用する場合)
  • ・Voice sender phone number(※Voiceを利用する場合)

インストールガイド)

https://marketplace.auth0.com/integrations/nttcpaas

実装手順(旧テナント)

Auth0 MarketplaceでのNTT CPaaSインストール手順

1. Auth0管理画面からMarketplace機能へアクセスし、「NTT CPaaS」を検索

2. 検索結果から「NTT CPaaS」を選択

3.「Add Integration」を選択

4. 表示されたアクセス内容を確認し、同意する場合は「続行」を選択

5. NTT CPaaSの接続情報を入力し「更新」を選択
※Voiceを利用する場合は、「Voice message reader gender」欄にて音声メッセージを読み上げるスピーカーの性別を選択してください。利用しない場合は、本項目は無視してください。

Auth0 多要素認証設定手順

1. Auth0管理画面からトリガー機能へアクセスし「send-phone-message」を選択

2. アクションの追加メニュー欄から、インストール済みのタブを選択し「NTT CPaaS」の要素をドラックアンドドロップでフローに追加

3. 「NTT CPaaS」の要素が追加されたことを確認し、「適用」を選択

4. セキュリティメニューの多要素認証機能へアクセスし、「電話メッセージ」を選択

5. 画面右上のトグルボタンから設定をオンへ切り替え後、配信プロバイダーメニューから「カスタム」を選択し、配信方法メニューからワンタイムパスワード(OTP)の送信方法を選択し「保存」を選択。
※OTPのメッセージ内容については、「登録テンプレート」と「検証テンプレート」から設定することが可能です。

6. 再度、多要素認証機能へアクセスし、ポリシー定義メニューから多要素認証の発動タイミングを選択
※本記事では検証用に「常時」を選択しています。

7. 追加設定メニューから「ActionsでMFA要素をカスタマイズする」の設定をオンへ切り替え

実装手順(新テナント)

Auth0 多要素認証設定手順

1. Auth0管理画面からブランディングメニューの電話プロバイダー機能へアクセスし、画面右上のトグルボタンから設定をオンへ切り替、電話プロバイダーメニューから「カスタム」を選択し、送信方法メニューからワンタイムパスワード(OTP)の送信方法を選択。その後、OTP送信用のカスタムコードを入力し「保存」を選択。

<OTP送信用のカスタムコード例>

exports.onExecuteCustomPhoneProvider = async (event, api) => {
  const authorization_key ="(NTT CPaaSのAPI key)";
  const base_url ="(NTT CPaaSのbase URL)";
  const sms_from_number ="(SMS sender phone number)";
  const voice_from_number ="(Voice sender phone number)";
  const voice_gender ="female";//Voiceの性別を"female"または"male"から選択
  const txt = event.notification.as_text;
  const recipient = event.notification.recipient;

  const myHeaders = new Headers();
  myHeaders.append("Authorization", "App "+authorization_key);
  myHeaders.append("Content-Type", "application/json");
  myHeaders.append("Accept", "application/json");

  if(event.notification.delivery_method === "text"){
  //SMSを利用した多要素認証のリクエストについて設定
    const raw = JSON.stringify({
      "messages": [
        {
          "sender": sms_from_number,
          "destinations": [{"to": recipient}],
          "content": {"text": txt}
        }
      ]
    });

    const requestOptions = {
      method: "POST",
      headers: myHeaders,
      body: raw,
      redirect: "follow"
    };

    fetch("https://"+base_url+"/sms/3/messages", requestOptions)
      .then((response) => response.text())
      .then((text) => console.log(text))
      .catch((error) => console.error(error));

  } else if (event.notification.delivery_method === "voice") {
  //Voiceを利用した多要素認証のリクエストについて設定
      const raw = JSON.stringify({
        "messages": [
          {
            "destinations": [{"to": recipient}],
            "from": voice_from_number,
            "language": event.request.language,
            "text": txt,
            "voice": {
              "gender": voice_gender
            }
          }
        ]
      });
  
      const requestOptions = {
        method: "POST",
        headers: myHeaders,
        body: raw,
        redirect: "follow"
      };
  
    fetch("https://"+base_url+"/tts/3/advanced", requestOptions)
      .then((response) => response.text())
      .then((text) => console.log(text))
      .catch((error) => console.error(error));
    }
  return;
};

2. セキュリティメニューの多要素認証機能へアクセスし、「電話メッセージ」を選択

3. 画面右上のトグルボタンから設定をオンへ切り替え後、配信方法メニューからワンタイムパスワード(OTP)の送信方法を選択し「保存」を選択。

4. 再度、多要素認証機能へアクセスし、ポリシー定義メニューから多要素認証の発動タイミングを選択
※本記事では検証用に「常時」を選択しています。

実装後の動作イメージ

SMSを利用した多要素認証フロー

本記事の手順に従い実装した場合の、SMS OTPを利用した多要素認証のフローは下記のイメージとなります。

Voiceを利用した多要素認証フロー

本記事の手順に従い実装した場合の、Voice OTPを利用した多要素認証のフローは下記のイメージとなります。

おわりに

本記事では、Auth0とNTT CPaaSを利用した多要素認証機能の実装方法について紹介しました。Auth0ではマーケットプレイス機能の利用や軽微なカスタマイズで、簡単に3rdパーティーサービスと連携しセキュリティを強化することが可能です。

Auth0やNTT CPaaSにご興味がある方は、弊社までお問合せください。

Auth0機能
最新のコラム

資料ダウンロード

CRMを成功に導く顧客ID統合に欠かせない3つのポイント

CRMを成功に導く顧客ID統合に欠かせない3つのポイント

GDPR対応など、顧客ID統合の検討時の3つのポイントと、「顧客ID&アクセス管理(CIAM)」がそれらをどのように解決するかについて解説します。