繁體中文(香港)
  • mfa
  • 2fa
  • totp
  • nodejs
  • security
  • authentication
  • authenticator app
  • otplib

如何在 Node.js 中使用驗證器應用程式實現雙重認證 (2FA)

了解如何在 Node.js 中使用驗證器應用程式、TOTP 和 otplib 庫實現雙重認證 (2FA)。這個逐步指南涵蓋從生成 QR 碼到驗證驗證碼的所有內容。

Yijun
Yijun
Developer

什麼是雙重認證 (2FA)

在傳統應用程式中,我們通常使用電子郵件/用戶名/電話作為身份標識符。通過將這些身份標識符與對應的密碼或驗證碼結合,我們可以完成身份驗證的過程。

然而,在安全要求更高的情況下,僅依賴身份標識符進行身份驗證是不夠的。這是因為這些身份標識符及其對應的驗證資訊可能容易洩露。

這就是雙重認證 (2FA) 的用武之地 - 一種額外的安全層,要求用戶提供兩個不同的驗證因素來驗證身份,確保嘗試訪問帳戶的是真正的合法用戶。

常見的 2FA 方法包括:

  • 使用驗證器應用程式的 TOTP 認證
  • 生物識別認證
  • 基於設備的認證
  • 短訊驗證碼

在本教程中,我們將專注於使用 otplib 庫在你的 Node.js 應用程式中實現基於 TOTP 的 2FA。

什麼是 TOTP 認證?

TOTP 代表基於時間的一次性密碼。如維基百科所述,它是一種計算機算法,可生成使用當前時間作為唯一性來源的一次性密碼 (OTP)。

當用戶的手機與應用伺服器之間共享 TOTP 密鑰時,用戶的手機和應用伺服器可以在同一時間點生成相同的 TOTP 密碼:

由於 TOTP 生成依賴時間,因此可以離線計算。此外,TOTP 生成一個數字字串,使其簡單且易於使用。因此,驗證 TOTP 常被用作雙重認證的一種方法。

當用戶使用 TOTP 作為雙重認證方法時,他們往往會遇到存儲 TOTP 密鑰和生成 TOTP 密碼的挑戰。這就是驗證器應用程式大派用場的地方。我們可以使用驗證器應用程式來存儲 TOTP 密鑰,驗證器應用程式會自動為你生成 TOTP 密碼。在需要驗證時,你只需打開驗證器應用程式,就會獲得與 TOTP 密鑰對應的 TOTP 密碼。流行的驗證器應用程式包括 Google AuthenticatorMicrosoft Authenticator

實現 TOTP 作為雙重認證的過程包括兩個步驟:

  1. 將 TOTP 密鑰綁定到用戶。
  2. 通過相關的 TOTP 密鑰驗證用戶的 TOTP 密碼。

將 TOTP 綁定到用戶的過程如下:

一旦用戶綁定了 TOTP,他們可以用它來進行驗證。過程如下:

如圖所示,在用戶方面,我們使用驗證器應用程式來管理 TOTP 密鑰和生成 TOTP 密碼。在伺服器方面,我們需要支持生成 TOTP 密鑰並驗證用戶發送的 TOTP 密碼。在本文中,我們將使用 otpllib 作為示例來整合伺服器端的 TOTP 相關功能。

使用 otplib 為你的 Node.js 應用程式實現基於 TOTP 的 2FA

假設你的應用程式基於 Express.js,且用戶通過 /sign-in 端點登錄,支持在用戶登錄過程中實現 TOTP 的計劃如下:

  1. 當用戶未綁定 TOTP 時,以 QR 碼的形式將 TOTP 密鑰發送給用戶,並提示他們綁定 TOTP。
  2. 當用戶已經綁定 TOTP 時,提示他們驗證 TOTP。

首先,安裝項目的依賴:otplibqrcode

接下來,讓我們增強 /sign-in 端點。

根據我們的實現,當用戶未綁定 TOTP 時,我們會將一個 QR 碼發送到前端:

綁定 TOTP

用戶使用驗證器應用程式掃描 QR 碼,驗證器應用程式將生成一個 TOTP 密碼並存儲相關的 TOTP 密鑰。

Google Authenticator

用戶將獲得的 TOTP 密碼傳回應用伺服器。如果密碼驗證成功,我們就可以將此 TOTP 綁定到用戶。

因此,讓我們實現一個 /verify-totp API 來接收用戶發送的 TOTP 密碼:

這樣,我們成功地為用戶綁定了 TOTP。隨後,當用戶登錄時,他們只需要打開驗證器應用程式,發送與之前綁定的 TOTP 密鑰相對應的驗證碼,即可完成身份驗證過程。

驗證 TOTP

/verify-totp API 中,我們使用之前綁定給用戶的 TOTP 密鑰來驗證 TOTP 密碼。

總結

根據本文,你應該能夠為你的應用集成驗證器應用程式驗證。

然而,這只是一個簡單的例子。當你的應用程序大型或預計變得複雜時,集成新的身份驗證方法可能會產生成本。

好消息是:Logto 作為一個全面的身份認證解決方案提供商,提供了多因素認證 (MFA) 支持,包括驗證器應用程式驗證。利用 Logto,你可以在短短幾分鐘內無縫將安全高效的用戶登入過程與 MFA 集成到你的應用程式中!