メインコンテンツまでスキップ

MFA のための SMS 認証 (SMS verification)

Logto は、SMS ベースの多要素認証 (多要素認証 (MFA)) 機能をサポートしており、ユーザーの登録済み電話番号にワンタイム認証コードを送信することでアカウントのセキュリティを強化します。SMS MFA は第 2 の認証要素として機能し、他の MFA 要素(TOTP、パスキー、バックアップコードなど)と組み合わせて、柔軟な 2 要素認証オプションをユーザーに提供できます。

概念

SMS 認証(電話番号認証とも呼ばれます)は、最も利用しやすい MFA 手法の 1 つです。携帯電話の普及を活用し、一時的なワンタイム認証コードをテキストメッセージでユーザーのデバイスに直接配信します。追加のソフトウェアインストールが必要なアプリベースの認証器とは異なり、SMS MFA はすべてのモバイルデバイスに標準搭載されている既存のメッセージングインフラを利用するため、ユーザーは特別な設定なしですぐに利用できます。

MFA のための SMS 認証の設定

ステップ 1: SMS コネクターとテンプレートの設定

  1. コンソール > コネクター > メールおよび SMS コネクター

    に移動します
  2. 適切な SMS コネクター(Twilio、SMS Aero など)を選択します
  3. 接続パラメーターを設定します
  4. MFA 用の SMS テンプレートを専用の usageType で設定します
    • MFA 検証用には MfaVerification usageType
    • MFA バインド用には BindMFA usageType
  5. コネクターの動作テストを行い、メッセージが正しく配信されることを確認します
  6. プロバイダーごとの詳細なセットアップ手順は SMS コネクター を参照してください

ステップ 2: MFA のための SMS を有効化

  1. コンソール > 多要素認証 (MFA) に移動します
  2. 「SMS 認証コード」要素を有効化します。SMS MFA は他の MFA 要素(TOTP、パスキー、バックアップコードなど)と組み合わせて利用することを推奨します(単一要素依存の低減のため)。
  3. 希望する MFA ポリシー(必須 / 任意)を設定します
  4. 設定変更を保存します
重要な利用上の注意:
  1. サインイン手法の制限:SMS 認証コードは、サインイン手法 (1FA) と MFA 要素 (2FA) の両方として同時に利用することはできません。SMS 実装ごとに 1 つの認証フローを選択してください。

  2. サインアップ手法との互換性:SMS 認証コードは、サインアップ手法と MFA の両方で同時に利用できます。Logto は選択した MFA ポリシーに基づき、同じ電話番号に対して 2 回 SMS 認証を要求しないようエンドユーザー登録フローを最適化します。

  3. パスワードリカバリーとの互換性:SMS 認証コードは、パスワードをお忘れの場合 と MFA の両方で同時に利用できますが、この組み合わせは 推奨されません。この構成では MFA のセキュリティ効果が低下します。なぜなら、ユーザーがパスワードリセット用の SMS 認証で MFA を回避し、新しいパスワードで 1FA 認証後、同じ SMS 手法で MFA 認証できてしまうためです。

SMS MFA セットアップフロー

MFA セットアップのプロンプトは、ユーザー登録時またはサインイン後に表示されます(設定した MFA ポリシー による)。

SMS MFA セットアップフローは、以下の要素によって影響を受けます:

  • MFA 主要要素の数:主要要素が複数ある場合、ユーザーはどれを設定するか選択する必要があります。主要要素とはバックアップコード以外の MFA 手法です。
  • バックアップコードの有効化:有効化されている場合、主要 MFA 要素の設定後に自動的にバックアップコードが生成され、ユーザーに保存を促します。
  • サインアップ識別子の設定:電話番号が サインアップ識別子 として利用され、登録時に SMS 認証コードで既に認証済みの場合、その番号は自動的に MFA 要素としてバインドされ、追加認証は不要です。他にも主要要素がある場合、UI には「2 段階認証を追加」オプションが表示され(スキップ可能)、MFA が有効であることも明示されます。
  • 既存ユーザーデータ:既存ユーザーがサインイン後に MFA を設定する場合、まず主要認証を完了し、その後 MFA セットアップに進みます。アカウントに既に認証済みの主要電話番号がある場合、上記サインアップ識別子の場合と同様の挙動となります。

以下は、よくある 3 つの SMS MFA バインドシナリオです。

シナリオ 1: 電話番号を MFA のみに利用(一般的なフロー)

電話番号がサインアップ識別子ではなく、MFA のみで利用する場合は、標準的なセットアップ手順に従います:

  • SMS MFA 要素が 1 つだけの場合、その要素のセットアップ UI を直接表示します。
  • 主要 MFA 要素が複数ある場合、「MFA をセットアップ」リストページを表示し、ユーザーにどの要素を設定するか選択させます。

例:

サインアップ: メールアドレス + メール認証コード + パスワード | MFA: SMS 認証コード + バックアップコード

SMS MFA setup flow 1-1

サインアップ: メールアドレス + メール認証コード + パスワード | MFA: `SMS 認証コード + パスキー

  • 認証アプリ OTP + バックアップコード`
SMS MFA setup flow 1-2

シナリオ 2: 電話番号がサインアップ識別子として認証済み

電話番号がサインアップ識別子であり、登録時に SMS コードで既に認証済みの場合、その番号は自動的に MFA 要素としてバインドされ、追加認証は不要です。

例:

サインアップ: 電話番号 + SMS 認証コード + パスワード | MFA: SMS 認証コード + バックアップコード

SMS MFA setup flow 2

シナリオ 3: 電話番号は認証済みだが主要要素が複数存在

電話番号がサインアップ時に認証済み(サインアップ識別子として)だが、アカウントに複数の主要 MFA 要素(例:SMS + パスキーや認証アプリ)がある場合、UI で「2 段階認証を追加」プロンプトが表示されます。ユーザーは追加要素の設定またはスキップを選択でき、MFA が既に有効であることも明示されます。

例:

サインアップ: 電話番号 + SMS 認証コード + パスワード | MFA: SMS 認証コード + パスキー + 認証アプリ OTP + バックアップコード

SMS MFA setup flow 3

SMS MFA 認証フロー

SMS MFA が有効なユーザーがサインインする際、主要認証 (1FA) を正常に完了した後、第 2 の認証要素 (2FA) として SMS 認証コードによる本人確認が求められます。

複数の MFA 要素が利用可能な場合、ユーザーは設定済みの要素から選択できます。どの MFA 要素を最初に表示するかは、MFA 設定 で指定した優先順位に従って決定されます。

例:

サインイン: メールアドレス + パスワード | MFA: SMS 認証コード(前回利用) / 認証アプリ OTP / バックアップコード

SMS MFA verification flow

エラーハンドリング

  1. 電話番号がバインドされていない

    • エラーコード: session.mfa.mfa_factor_not_enabled
    • 対応: まず電話番号をバインドするよう案内
  2. 認証コードが間違っている

    • エラーコード: verification_code.code_mismatch
    • 対応: 再入力を促し、再試行回数を制限
  3. 認証コードの有効期限切れ

    • エラーコード: verification_code.expired
    • 対応: 新しい認証コードの再送信を促す
  4. 送信レート制限超過

    • エラーコード: connector.rate_limit_exceeded
    • 対応: 待機時間を表示し、再送信を制限