使用 SMS 進行多重要素驗證 (MFA)
Logto 支援基於 SMS 的多重要素驗證 (MFA, Multi-factor authentication) 功能,透過向使用者註冊的手機號碼發送一次性驗證碼來提升帳號安全性。SMS MFA 作為第二驗證因素,可與其他 MFA 因素(如 TOTP、通行密鑰、備用碼)結合,為使用者提供彈性的雙重驗證選項。
概念說明
SMS 驗證(也稱為手機號碼驗證)是最易於取得的 MFA 方法之一。它利用行動電話的普及性,直接將臨時一次性驗證碼透過簡訊發送到使用者裝置。與需要額外安裝軟體的應用程式型驗證器不同,SMS MFA 利用每台行動裝置都具備的現有簡訊基礎設施,讓使用者無需任何額外設定即可立即使用。
設定 SMS 作為 MFA 驗證方式
步驟 1:設定 SMS 連接器與簡訊範本
- 前往 控制台 > 連接器 > 電子郵件與 SMS 連接器
- 選擇合適的 SMS 連接器(Twilio、SMS Aero 等)
- 設定連線參數
- 為 MFA 設定專用用途的 SMS 範本
MfaVerification
usageType 用於 MFA 驗證BindMFA
usageType 用於綁定 MFA
- 測試連接器功能以確保訊息可正常發送
- 參考 SMS 連接器 取得各供應商的詳細設定說明
步驟 2:啟用 SMS 作為 MFA 驗證方式
- 前往 控制台 > 多重要素驗證
- 啟用「SMS 驗證碼」因素。建議將 SMS MFA 與其他 MFA 因素(TOTP、通行密鑰、備用碼)搭配使用,以降低單一因素依賴。
- 設定你偏好的 MFA 政策(強制或選用)
- 儲存設定變更
SMS MFA 設定流程
MFA 設定提示可能出現在使用者註冊時或登入後,具體取決於你設定的 MFA 政策。使用者也可在 帳號設定頁 啟用 SMS MFA。
SMS MFA 設定流程會受到以下因素影響:
- MFA 主因素數量:若有多個主因素,使用者需選擇一個進行設定。主因素指備用碼以外的 MFA 方法。
- 備用碼啟用:啟用時,主 MFA 因素設定完成後會自動產生備用碼,並提示使用者儲存。
- 註冊識別子設定:若手機號碼作為 註冊識別子 並於註冊時已用 SMS 驗證碼驗證,系統會自動將該號碼綁定為 MFA 因素,無需再次驗證。若有其他主因素,UI 會顯示「新增另一個兩步驟驗證」選項(可略過),並明確標示 MFA 已啟用。
- 現有使用者資料:現有使用者登入後設定 MFA 時,需先完成主驗證,再進行 MFA 設定。若帳號已包含已驗證的主手機號碼,設定流程與上述註冊識別子情境相同。
以下為三種常見 SMS MFA 綁定情境。
情境 1:手機號碼僅用於 MFA(典型流程)
當手機號碼不是註冊識別子,僅用於 MFA 時,請依標準設定流程操作:
- 若僅有一個 SMS MFA 因素,直接顯示該因素的設定 UI。
- 若有多個主 MFA 因素,顯示「設定 MFA」列表頁,讓使用者選擇要設定的因素。
範例:
註冊:Email + Email 驗證碼 + 密碼
| MFA:SMS 驗證碼 + 備用碼

註冊:Email + Email 驗證碼 + 密碼
| MFA:SMS 驗證碼 + 通行密鑰 + 驗證器 App OTP + 備用碼
Email + Email 驗證碼 + 密碼
| MFA:SMS 驗證碼 + 通行密鑰 + 驗證器 App OTP + 備用碼

情境 2:手機號碼作為註冊識別子並已驗證
若手機號碼為註冊識別子,且使用者於註冊時已用 SMS 驗證碼驗證,系統會自動將該號碼綁定為 MFA 因素,無需額外驗證。
範例:
註冊:手機號碼 + SMS 驗證碼 + 密碼
| MFA:SMS 驗證碼 + 備用碼

情境 3:手機號碼已驗證但有多個主因素
若手機號碼於註冊時已驗證(作為註冊識別子),但帳號有多個主 MFA 因素(如 SMS 加通行密鑰或驗證器 App),UI 會提示「新增另一個兩步驟驗證」。使用者可選擇新增其他因素或略過,提示同時也會說明 MFA 已啟用。
範例:
註冊:手機號碼 + SMS 驗證碼 + 密碼
| MFA:SMS 驗證碼 + 通行密鑰 + 驗證器 App OTP + 備用碼
手機號碼 + SMS 驗證碼 + 密碼
| MFA:SMS 驗證碼 + 通行密鑰 + 驗證器 App OTP + 備用碼

SMS MFA 驗證流程
啟用 SMS MFA 的使用者登入時,完成主驗證(1FA)後,系統會提示其以 SMS 驗證碼作為第二驗證因素(2FA)驗證身分。
若有多個 MFA 因素,使用者可從已設定的因素中選擇。系統會根據 MFA 設定 中指定的優先順序決定先提示哪個 MFA 因素。
範例:
登入:Email address + 密碼
| MFA:SMS 驗證碼(上次使用)/ 驗證器 App OTP / 備用碼
Email address + 密碼
| MFA:SMS 驗證碼(上次使用)/ 驗證器 App OTP / 備用碼

錯誤處理
-
手機號碼未綁定
- 錯誤代碼:
session.mfa.mfa_factor_not_enabled
- 處理方式:引導使用者先綁定手機號碼
- 錯誤代碼:
-
驗證碼錯誤
- 錯誤代碼:
verification_code.code_mismatch
- 處理方式:提示使用者重新輸入,限制重試次數
- 錯誤代碼:
-
驗證碼已過期
- 錯誤代碼:
verification_code.expired
- 處理方式:提示使用者重新取得驗證碼
- 錯誤代碼:
-
發送頻率超限
- 錯誤代碼:
connector.rate_limit_exceeded
- 處理方式:顯示等待時間,限制重發次數
- 錯誤代碼: