指南

如何為你的 App 加入雙重認證

要為你嘅 App 加入雙重認證(2FA),讓用戶透過掃描 QR code 連結驗證器應用程式,然後輸入密碼之後,由該應用程式顯示嘅六位數字代碼,只有當代碼驗證成功後,伺服器先會建立完整嘅 session。用戶開啟 2FA 時,應該給佢哋單次使用嘅備用碼,限制任何人可以猜測代碼嘅次數,並要求用戶輸入密碼同目前有效嘅代碼,先可以關閉 2FA。如果你使用託管嘅驗證供應商,就開啟佢內置嘅多重認證選項,而唔好自行開發。

本指南會逐步講解各種選擇、具體流程、可以俾 AI 生成工具使用嘅提示詞,以及一些會令 2FA 看似存在、實際上卻冇作用嘅常見錯誤。如果你對呢個概念仍然陌生,可以先閱讀什麼是雙重認證。

開始之前:你需要一個可運作嘅登入系統

2FA 建基於現有嘅登入之上。你需要先具備以下其中一項:

  • 你自己嘅登入系統,用戶同經過雜湊處理嘅密碼儲存於你 App 嘅資料庫。
  • 託管嘅驗證供應商,由佢代你管理用戶。

如果兩樣你都仲未有,可以先由如何為你的 App 加入登入開始。本指南其餘部分假設密碼步驟已經可以正常運作。

揀選第二重驗證方式

方式用戶要做嘅事安全程度運作成本是否良好預設?
驗證器應用程式(TOTP)掃描一次 QR code,之後登入時輸入代碼良好;如果假網站要求輸入代碼,仍然可能被釣魚免費大部分 App 都適合
通行密鑰或安全金鑰輕按或使用指紋最強;能抵抗釣魚免費如果你嘅用戶願意使用,就適合
電郵驗證碼登入時查看收件箱只能與電郵帳戶一樣安全需要支付電郵發送費用只作後備
SMS 驗證碼等待收到短訊最弱;有 SIM 卡交換同釣魚風險每則訊息收費只有用戶無法使用應用程式時才採用

TOTP 代表 time-based one-time password(基於時間嘅一次性密碼),即驗證器應用程式使用嘅標準(RFC 6238)。你嘅伺服器同用戶嘅手機共用一個金鑰;雙方各自根據該金鑰同目前時間,生成相同嘅短代碼,通常每 30 秒更換一次。它不需要網絡連線,亦不需要 SMS 服務供應商。

通行密鑰以儲存於用戶裝置上嘅密碼學金鑰取代或補充密碼。它更加安全,但你自行建立時工作量較多,所以好多 App 會先用 TOTP,之後再加入通行密鑰,或者從驗證供應商取得。

自行建立,定係開啟現成功能?

做法優點缺點
託管驗證供應商嘅 MFA程式碼較少;安全細節由供應商維護規模大時要付月費;依賴供應商提供嘅選項
自行用函式庫實現 TOTP完全掌控;冇每位用戶收費你要自己處理邊緣情況:鎖定、恢復同金鑰儲存

請查閱你供應商目前嘅文件,了解佢支援邊啲驗證方式,以及各個方式適用於邊個計劃。無論點樣揀,都唔好自行編寫生成代碼嘅數學運算;請使用廣泛採用嘅函式庫。

先決定政策

寫提示詞之前先回答以下問題,因為答案會改變設計:

  1. **邊啲人必須使用?**對所有人自願使用、要求管理員同職員使用,定係要求所有人使用。要求具管理權限嘅人使用好常見。參閱角色式存取控制。
  2. **用戶幾耐需要重新輸入代碼?**每次登入,定係每部裝置每 30 日一次(「記住此裝置」)。
  3. **邊啲操作需要重新驗證?**更改電郵、付款資料或者關閉 2FA,都是很好嘅例子。呢個稱為步驟提升驗證(step-up authentication)。
  4. **遺失手機時嘅程序係咩?**備用碼,加上你願意執行嘅人手後備程序。

逐步做法:自行登入系統嘅 TOTP 2FA

1. 儲存正確嘅欄位

每位用戶需要:2FA 是否已啟用、TOTP 金鑰(需要加密儲存,唔可以用明文)、啟用嘅時間,以及一個經過雜湊處理嘅備用碼清單(同密碼一樣處理)。另外要加入一個地方計算失敗嘗試次數。

2. 登記

  1. 用戶打開設定,撳開啟雙重認證。
  2. 伺服器生成一個新金鑰,並以 QR code 形式回傳,另外提供文字版本,俾無法掃描嘅人使用。
  3. 用戶用驗證器應用程式掃描,然後輸入目前顯示嘅代碼。
  4. 伺服器驗證代碼。只有代碼正確,才會儲存金鑰並將 2FA 標示為已啟用。
  5. App 只顯示一次 8 至 10 個備用碼,並要求用戶將其儲存。

第 4 步好關鍵:如果喺確認代碼之前就開啟 2FA,掃描失敗嘅人下次登入時就會被鎖在門外。

3. 登入時加入第二步

  1. 用戶提交電郵同密碼,伺服器驗證佢哋。
  2. 如果已啟用 2FA,伺服器唔會建立完整 session,而係建立一個短暫有效嘅「等待第二重驗證」狀態。
  3. App 顯示代碼輸入畫面。伺服器驗證代碼,並容許少量時間偏差。
  4. 直到呢一刻,伺服器先會發出真正嘅 session。

每個受保護嘅路由同 API 端點都必須拒絕「等待第二重驗證」狀態。如果 2FA 畫面只係喺瀏覽器中隱藏頁面,人哋可以直接呼叫 API 繞過。

4. 限制次數同發出提示

六位數字代碼有一百萬種組合,如果冇限制,就可以被猜到。應該限制嘗試次數,連續失敗後暫時鎖定第二步驗證,並在發生時向用戶發出電郵。參閱速率限制同從你嘅 App 發送電郵。

5. 復原同關閉

  • 每個備用碼只可以使用一次,用完即刪除。
  • 關閉 2FA 需要密碼同目前有效嘅代碼,或者備用碼。
  • 重新生成備用碼會令舊有一組失效。
  • 每當 2FA 被開啟或關閉時,都要電郵通知用戶。

俾 AI 生成工具嘅提示詞

先加入核心流程:

為我哋現有嘅電郵同密碼登入加入可選嘅雙重認證,使用驗證器應用程式(TOTP)。使用廣泛採用嘅 TOTP 函式庫,唔好自己編寫演算法。喺設定頁面顯示 QR code 同文字金鑰,並只有當用戶輸入正確代碼後,才啟用 2FA。金鑰需要加密儲存,設定完成後不再顯示。顯示 10 個單次使用嘅備用碼,只顯示一次,並以雜湊形式儲存。

然後是強制執行,呢度係 AI 生成程式碼最常出錯嘅地方:

喺伺服器上強制執行 2FA。密碼正確之後,已啟用 2FA 嘅用戶會進入一個短暫有效嘅等待狀態,而唔係完整 session。每個受保護嘅頁面同 API 路由都必須拒絕等待狀態。代碼嘗試次數限制為 5 次,之後將第二步驗證鎖定 15 分鐘,並電郵通知用戶。

然後是政策:

要求管理員帳戶使用 2FA:未啟用 2FA 嘅管理員會被引導去設定,完成之前無法進入儀表板。關閉 2FA 或更改帳戶電郵時,需要同時輸入密碼同目前有效嘅代碼。每當 2FA 被啟用或停用時,都要電郵通知用戶。

最後,要求 Agent 解釋它建立咗乜嘢:

列出每一個會檢查第二重驗證是否已完成嘅路由,說明 TOTP 金鑰同備用碼儲存喺邊度,以及如何保護佢哋。

常見錯誤

  • **密碼之後就發出完整 session。**呢個係最嚴重嘅錯誤。如果代碼未經檢查,完整 session 已經存在,2FA 就只係裝飾。測試方法係:只完成密碼步驟後,直接呼叫一個受保護嘅 API。
  • **冇限制嘗試次數。**冇限制嘅猜測,令代碼可以被暴力破解。
  • **金鑰或備用碼以明文儲存。**資料庫一旦外洩,所有人嘅第二重驗證資料都會被取得。
  • **未驗證就先啟用。**掃描錯誤嘅用戶,下次登入時會被鎖在門外。
  • **冇復原途徑。**每次遺失手機都變成一張支援單,或者失去一位客戶。
  • **容易關閉。**如果被盜取嘅 session 可以唔使代碼就關閉 2FA,保護就失效了。
  • **代碼出現喺日誌中。**確保代碼同金鑰永遠唔會出現喺伺服器日誌或錯誤訊息中。
  • **只喺登入頁面檢查。**密碼重設、「魔術連結」登入同任何社交登入,都必須尊重 2FA;否則就會變成繞過它嘅途徑。

測試清單

  • 只有驗證成功代碼之後,登記才會完成
  • 密碼正確但冇輸入代碼,無法存取任何受保護嘅頁面或 API
  • 錯誤代碼會被拒絕;連續輸入錯誤代碼會觸發鎖定同電郵
  • 幾分鐘前嘅代碼會被拒絕
  • 每個備用碼只可以使用一次
  • 關閉 2FA 需要密碼同目前有效嘅代碼
  • 密碼重設唔可以繞過 2FA
  • 未啟用 2FA 嘅管理員無法進入管理頁面(如果有此要求)
  • 金鑰同備用碼喺資料庫中已加密或雜湊處理
  • 日誌中冇任何代碼或金鑰

上線之前,亦要完成AI 建立 App 嘅安全檢查清單。

喺 Mythex 加入 2FA

Mythex 唔包括為你 App 嘅最終用戶而設嘅內置登入系統,所以 2FA 會成為你所選登入方式嘅一部分:可以係你自己用專案資料庫建立嘅電郵加密碼登入,或者係支援多重認證嘅託管供應商。你可以喺對話中用類似上面嘅提示詞描述需求,而任何供應商金鑰都應該放入專案機密(透過 /secrets、專案設定,或者 Agent 顯示嘅機密卡片),而唔係放入訊息框。文件中嘅為你的 App 加入登入食譜提供咗起步提示詞,而為你建立嘅 App 做安全設定則涵蓋金鑰同權限方面嘅日常習慣。Agent 完成工作之後,喺 Preview 中逐項測試檢查清單,然後才發布。

常見問題

為 App 加入雙重認證最簡單嘅方法係咩?

如果你使用託管嘅驗證供應商,開啟佢內置嘅多重認證選項通常最省程式碼。如果你自行運作登入,就加入驗證器應用程式代碼(TOTP),並使用廣泛採用嘅函式庫,再加上備用碼同伺服器端檢查。

我應該用 SMS 驗證碼做 2FA 嗎?

SMS 總比完全冇第二重驗證好,但它係常見選項中最弱嘅一種,因為短訊可能會被 SIM 卡交換攻擊(SIM swapping)轉走,而驗證碼亦可以被釣魚取得。建議預設使用驗證器應用程式,如果你嘅用戶已經準備好,亦可以提供通行密鑰。

加入 2FA 一定要有資料庫嗎?

如果你自行運作登入,就一定需要。每位用戶嘅 2FA 金鑰、2FA 是否已開啟,以及佢哋經過雜湊處理嘅備用碼,都必須儲存喺你嘅伺服器可以檢查到嘅地方。託管驗證供應商會代你儲存呢啲資料。

如果用戶遺失手機會怎樣?

佢可以用當初開啟 2FA 時顯示嘅其中一個單次備用碼登入,然後喺新裝置上重新設定 2FA。如果冇備用碼,你就需要進行人手身份核實,所以要喺上線前決定好呢個程序。

Mythex · Pricing · 用 AI 建造任何嘢 · 網站及應用程式範本 · Mythex 比較 · AI 應用程式開發詞彙表 · 免費 AI 應用程式開發工具 · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(台灣)