雙因子認證(2FA)是什么?從零設計一個安全的雙因子登錄接口

前言

在信息系統逐漸走向數字化、云端化的今天,賬號密碼登錄已不再是足夠安全的手段。數據泄露、撞庫攻擊、社工手段頻發,僅靠「你知道的密碼」已不足以保證賬戶安全。

因此,雙因子認證(2FA, Two-Factor Authentication) 成為企業安全防線中不可或缺的一環。本文將從0出發,為你講解雙因子登錄接口的設計理念、完整流程、技術細節與實踐建議。?


?

一、什么是雙因子認證?

雙因子認證,顧名思義,是使用兩個不同維度的驗證因子來驗證用戶身份,常見的驗證因子類型如下:

因子類型描述舉例
第一因子用戶知道的密碼、圖案、PIN
第二因子用戶擁有的或特征手機驗證碼、動態口令、生物特征

與傳統登錄只需用戶名密碼不同,2FA 要求用戶 先通過密碼驗證,再使用如短信驗證碼或 App 動態口令來完成最終登錄。

在 2FA 機制中,必須選擇兩類不同類型的因子。例如“密碼 + 驗證碼”,“密碼 + 指紋”,“賬號 + 動態令牌”。

舉個最簡單的例子:

用戶輸入賬號密碼登錄,后端判斷賬號密碼正確,生成一個loginToken,并將其做個映射,響應給前端。前端在第二個因子驗證時,需要帶上這個loginToken,后端要先驗證loginToken是否正確,再驗證第二個因子,比如短信等。

二、為什么不能直接把驗證碼一起提交?

很多人最初的做法是這樣的:

{
"username": "zhangsan",
"password": "123456",
"code": "851022" ? // 短信驗證碼
}

但這樣做會把兩個因子一次性發送到服務器,安全性大打折扣。如果網絡層被監聽(如在不安全的 WiFi 環境),攻擊者只需截獲一次請求即可拿到全部認證信息。

🧠 正確做法:將登錄流程拆分成兩步,分別完成。


三、雙因子登錄接口設計方案

第一步:賬號密碼驗證

接口: /api/login/basic

請求參數:

{
"username": "zhangsan",
"password": "123456"
}

響應數據:

{
"code": 200,
"message": "密碼驗證通過,請進行二次驗證",
"loginToken": "abc123-login-temp-token",
"factor": "sms"
}

后端處理邏輯:

  1. 驗證用戶名與密碼

  2. 如果正確:

    • 生成一個臨時 loginToken(UUID,隨機字符串)

    • 保存 loginToken -> userId 到 Redis,設置短期過期(如5分鐘)

    • 向用戶手機號發送短信驗證碼

  3. 返回 loginToken 給前端,用于第二步驗證


第二步:驗證短信驗證碼

接口:?/api/login/verify-second-factor

請求參數:

{
"loginToken": "abc123-login-temp-token",
"code": "851022"
}

響應數據:

{
"code": 200,
"message": "登錄成功",
"accessToken": "jwt-token-xxx",
"refreshToken": "refresh-token-yyy",
"userInfo": {
"id": 1001,
"username": "zhangsan"
}
}

后端處理邏輯:

  1. 檢查 loginToken 是否存在并未過期

  2. 根據 loginToken 取出 userId

  3. 校驗該用戶的短信驗證碼是否正確

  4. 驗證成功:

    • 生成 accessToken(JWT 或 Session)

    • 刪除 loginToken 與驗證碼緩存

    • 返回 accessToken 給前端

結語

雙因子認證已成為保護用戶賬戶安全的主流方案。通過合理的流程拆分、Redis 狀態管理、接口限流控制和錯誤次數保護機制,我們可以有效構建一個 安全、可靠、可擴展的 2FA 登錄系統

未來還可以繼續拓展如:Google Authenticator(TOTP)、指紋、人臉識別(生物因子)、企業級 USBKey 登錄(數字證書)等。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/90246.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/90246.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/90246.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

stack棧練習

為了你,我變成狼人模樣; 為了你,染上了瘋狂~ 目錄stack棧練習棧括號的分數單調棧模板框架小結下一個更大元素 I(單調棧哈希)接雨水stack棧練習 棧 一種先進后出的線性數據結構 具體用法可參考往期文章或者維基介紹i…

詳細頁智能解析算法:洞悉海量頁面數據的核心技術

詳細頁智能解析算法:突破網頁數據提取瓶頸的核心技術剖析引言:數字時代的數據采集革命在當今數據驅動的商業環境中,詳細頁數據已成為企業決策的黃金資源。無論是電商商品詳情、金融公告還是新聞資訊,??有效提取結構化信息??直…

ubuntu環境如何安裝matlab2016

一、下載安裝文件(里面包含激活包CRACK)可從度盤下載:鏈接:https://pan.baidu.com/s/1wxmVMzXiSY4RIT0dyKkjZg?pwd26h6 復制這段內容打開「百度網盤APP 即可獲取」注:這里面包含三個文件,其中ISO包含安裝文件&#x…

Mybits-plus 表關聯查詢,嵌套查詢,子查詢示例演示

在 MyBatis-Plus 中實現表關聯查詢、嵌套查詢和子查詢,通常需要結合 XML 映射文件或 Select 注解編寫自定義 SQL。以下是具體示例演示:示例場景 假設有兩張表: 用戶表 userCREATE TABLE user (id BIGINT PRIMARY KEY,name VARCHAR(50),age IN…

Stable Diffusion Web 環境搭建

默認你的系統Ubuntu、CUDA、Conda等都存在,即具備運行深度學習模型的基礎環境 本人:Ubuntu22.04、CUDA11.8環境搭建 克隆項目并且創建環境 https://github.com/AUTOMATIC1111/stable-diffusion-webui conda create -n sd python3.10運行過程自動安裝依賴…

嵌入式系統中實現串口重定向

在嵌入式系統中實現串口重定向(將標準輸出如 printf 函數輸出重定向到串口)通常有以下幾種常用方法,下面結合具體代碼示例和適用場景進行說明: 1. 重寫 fputc 函數(最常見、最基礎的方法) 通過重寫標準庫中…

static補充知識點-代碼

public class Student {private static int age;//靜態的變量private double score;//非靜態的方法public void run(){}public static void go(){}public static void main(String[] args) {new Student().run();Student.go();} } public class Person {//2 : 賦初始…

使用泛型<T>,模塊化,反射思想進行多表數據推送

需求:有13個表,其中一個主表和12細表,主表用來記錄推送狀態,細表記錄12種病例的詳細信息,現在需要把這12張病例表數據進行數據推送;普通方法需要寫12個方法分別去推送數據然后修改狀態;現在可以…

光流 | RAFT光流算法如何改進提升

RAFT(Recurrent All-Pairs Field Transforms)作為ECCV 2020最佳論文,已成為光流估計領域的標桿模型。其通過構建4D相關體金字塔和GRU迭代優化機制,在精度與泛化性上實現了突破。但針對其計算效率、大位移處理、跨場景泛化等問題,研究者提出了多維度改進方案,核心方向可系…

linux/ubuntu日志管理--/dev/log 的本質與作用

文章目錄 **一、基本概念****二、技術細節:UNIX域套接字****三、在不同日志系統中的角色****四、應用程序如何使用 `dev/log`****五、查看和驗證 `/dev/log`****六、總結 `/dev/log` 的核心作用**一、基本概念 /dev/log 是一個 UNIX域套接字(Unix Domain Socket),是Linux系…

EMC整改案例之(1):汽車NFC進入模塊BCI整改

EMC整改案例(1):汽車NFC進入模塊BCI整改 在汽車電子系統中,NFC(Near Field Communication)進入模塊用于實現無鑰匙進入功能,但它在電磁兼容(EMC)測試中常面臨挑戰。本案例聚焦于BCI(Bulk Current Injection)測試整改,該測試模擬大電流注入對設備的影響。以下是基于…

2025年INS SCI2區,靈活交叉變異灰狼算法GWO_C/M+集群任務調度,深度解析+性能實測

目錄1.摘要2.灰狼算法GWO原理3.靈活交叉變異灰狼算法GWO_C/M4.結果展示5.參考文獻6.代碼獲取7.算法輔導應用定制讀者交流1.摘要 隨著云計算的快速發展,受自然現象啟發的任務調度算法逐漸成為研究的熱點。灰狼算法(GWO)因其強大的收斂性和易于…

Java常用加密算法詳解與實戰代碼 - 附可直接運行的測試示例

🌷 古之立大事者,不惟有超世之才,亦必有堅忍不拔之志 🎐 個人CSND主頁——Micro麥可樂的博客 🐥《Docker實操教程》專欄以最新的Centos版本為基礎進行Docker實操教程,入門到實戰 🌺《RabbitMQ》…

2025開發者工具鏈革命:AI賦能的效率躍遷

目錄引言:效率焦慮下的開發者生存現狀一、智能代碼編輯器:從輔助到主導的進化1.1 GitHub Copilot:全能型AI助手1.2 Cursor Pro:極致編碼體驗1.3 飛算JavaAI:垂直領域顛覆者二、版本控制革命:Git的AI進化論2…

“虛空”的物理、哲學悖論

一、虛空并非“完全真空”:量子場論揭示的“真空不空” 物理真空的本質 現代物理學中的“真空”并非絕對的空無一物,而是量子場的基態(能量最低狀態)。根據量子場論: 虛粒子漲落:真空中持續發生量子漲落&am…

CSP-S模擬賽二總結(實際難度大于CSP-S)

T1 很簡短,也很好做,第一題直接場切。 我的方法 首先要明確一件事:就是如果選了 ax,ya_{x,y}ax,y?,那么就必然要選 ay,xa_{y,x}ay,x?,所以第一步就在 ax,ya_{x,y}ax,y? 的基礎上加上 ay,xa_{y,x}ay,x?。 然后我…

旋轉屏幕優化

1.問題背景 從google原生算法,可以知道其有2個比較大的缺陷: 1) 通過重力傳感器傳來的x,y,z軸的加速度合成之后只有一個垂直往下的加速度,如果此時用戶在別的方向上有加速度,那么通過反余弦、反正切等計算…

Java---day2

七、IDEA開發工具 📦 一、下載 IntelliJ IDEA 官網地址: 🔗 IntelliJ IDEA – the IDE for Pro Java and Kotlin Development 版本選擇: 版本說明Community Edition (CE)免費開源版本,適合 Java、Kotlin、Android…

RAL-2025 | 清華大學數字孿生驅動的機器人視覺導航!VR-Robo:面向視覺機器人導航與運動的現實-模擬-現實框架

作者: Shaoting Zhu, Linzhan Mou, Derun Li, Baijun Ye, Runhan Huang, Hang Zhao單位:清華大學交叉信息研究院,上海期智研究院,Galaxea AI,上海交通大學電子信息與電氣工程學院論文標題:VR-Robo: A Real-…

碰一碰發視頻 + 矩陣系統聚合平臺源碼搭建,支持OEM

隨著短視頻生態與多平臺運營需求的融合,“碰一碰發視頻 矩陣系統” 聚合平臺成為內容創作者與企業營銷的新基建。這類系統需實現近場交互觸發、多平臺內容分發、數據聚合分析的全流程閉環,其源碼搭建與定制開發需突破硬件交互與軟件矩陣的技術壁壘。核心…