MFA のための SMS 認証 (SMS verification)
Logto は、SMS ベースの多要素認証 (多要素認証 (MFA)) 機能をサポートしており、ユーザーの登録済み電話番号にワンタイム認証コードを送信することでアカウントのセキュリティを強化します。SMS MFA は第 2 の認証要素として機能し、他の MFA 要素(TOTP、パスキー、バックアップコードなど)と組み合わせて、柔軟な 2 要素認証オプションをユーザーに提供できます。
概念
SMS 認証(電話番号認証とも呼ばれます)は、最も利用しやすい MFA 手法の 1 つです。携帯電話の普及を活用し、一時的なワンタイム認証コードをテキストメッセージでユーザーのデバイスに直接配信します。追加のソフトウェアインストールが必要なアプリベースの認証器とは異なり、SMS MFA はすべてのモバイルデバイスに標準搭載されている既存のメッセージングインフラを利用するため、ユーザーは特別な設定なしですぐに利用できます。
MFA のための SMS 認証の設定
ステップ 1: SMS コネクターとテンプレートの設定
-
コンソール > コネクター > メールおよび SMS コネクター
に移動します - 適切な SMS コネクター(Twilio、SMS Aero など)を選択します
- 接続パラメーターを設定します
- MFA 用の SMS テンプレートを専用の usageType で設定します
- MFA 検証用には
MfaVerification
usageType - MFA バインド用には
BindMFA
usageType
- MFA 検証用には
- コネクターの動作テストを行い、メッセージが正しく配信されることを確認します
- プロバイダーごとの詳細なセットアップ手順は SMS コネクター を参照してください
ステップ 2: MFA のための SMS を有効化
- コンソール > 多要素認証 (MFA) に移動します
- 「SMS 認証コード」要素を有効化します。SMS MFA は他の MFA 要素(TOTP、パスキー、バックアップコードなど)と組み合わせて利用することを推奨します(単一要素依存の低減のため)。
- 希望する MFA ポリシー(必須 / 任意)を設定します
- 設定変更を保存します
-
サインイン手法の制限:SMS 認証コードは、サインイン手法 (1FA) と MFA 要素 (2FA) の両方として同時に利用することはできません。SMS 実装ごとに 1 つの認証フローを選択してください。
-
サインアップ手法との互換性:SMS 認証コードは、サインアップ手法と MFA の両方で同時に利用できます。Logto は選択した MFA ポリシーに基づき、同じ電話番号に対して 2 回 SMS 認証を要求しないようエンドユーザー登録フローを最適化します。
-
パスワードリカバリーとの互換性: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 認証コード + バックアップコード
メールアドレス + メール認証コード + パスワード
| MFA: SMS 認証コード + バックアップコード

サインアップ: メールアドレス + メール認証コード + パスワード
| MFA: `SMS 認証コード + パスキー
- 認証アプリ OTP + バックアップコード`
メールアドレス + メール認証コード + パスワード
| MFA: `SMS 認証コード + パスキー
シナリオ 2: 電話番号がサインアップ識別子として認証済み
電話番号がサインアップ識別子であり、登録時に SMS コードで既に認証済みの場合、その番号は自動的に MFA 要素としてバインドされ、追加認証は不要です。
例:
サインアップ: 電話番号 + SMS 認証コード + パスワード
| MFA: SMS 認証コード + バックアップコード
電話番号 + SMS 認証コード + パスワード
| MFA: SMS 認証コード + バックアップコード

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

SMS MFA 認証フロー
SMS MFA が有効なユーザーがサインインする際、主要認証 (1FA) を正常に完了した後、第 2 の認証要素 (2FA) として SMS 認証コードによる本人確認が求められます。
複数の MFA 要素が利用可能な場合、ユーザーは設定済みの要素から選択できます。どの MFA 要素を最初に表示するかは、MFA 設定 で指定した優先順位に従って決定されます。
例:
サインイン: メールアドレス + パスワード
| MFA: SMS 認証コード(前回利用) / 認証アプリ OTP / バックアップコード
メールアドレス + パスワード
| MFA: SMS 認証コード(前回利用) / 認証アプリ OTP / バックアップコード

エラーハンドリング
-
電話番号がバインドされていない
- エラーコード:
session.mfa.mfa_factor_not_enabled
- 対応: まず電話番号をバインドするよう案内
- エラーコード:
-
認証コードが間違っている
- エラーコード:
verification_code.code_mismatch
- 対応: 再入力を促し、再試行回数を制限
- エラーコード:
-
認証コードの有効期限切れ
- エラーコード:
verification_code.expired
- 対応: 新しい認証コードの再送信を促す
- エラーコード:
-
送信レート制限超過
- エラーコード:
connector.rate_limit_exceeded
- 対応: 待機時間を表示し、再送信を制限
- エラーコード: