HTTP接口鑒權方式

幾種主流且可行的HTTP接口鑒權方式,從簡單到復雜,各有其適用場景。

我將它們分為兩大類:傳統方式現代方式


一、傳統方式

這類方式簡單易用,但通常安全性較低或擴展性較差,適用于內部系統或簡單API。

1. HTTP Basic Authentication
  • 機制:客戶端在請求頭 Authorization 中直接以 Base64 編碼格式發送用戶名和密碼。
    • 格式:Authorization: Basic base64(username:password)
  • 流程
    1. 客戶端發送請求。
    2. 服務端返回 401 Unauthorized 并攜帶頭 WWW-Authenticate: Basic realm="User Visible Realm"
    3. 客戶端彈出對話框要求輸入用戶名密碼,然后攜帶編碼后的憑證重試請求。
    4. 服務端驗證憑證,成功則返回資源。
  • 優點:非常簡單,幾乎所有HTTP客戶端和服務器都支持。
  • 缺點
    • 極不安全:Base64是編碼,不是加密。密碼相當于明文傳輸,必須與HTTPS配合使用。
    • 無注銷機制,除非關閉瀏覽器。
    • 用戶體驗差(瀏覽器彈窗)。
  • 適用場景:內部網絡、對安全性要求不高的簡單設備認證(如路由器管理界面)。

2. API Key / Token
  • 機制:服務端為每個客戶端生成一個唯一且復雜的字符串(API Key)。客戶端在每次請求時通過URL參數或請求頭(如 X-API-Key: your_api_key)傳遞此Key。
  • 流程
    1. 客戶端從服務端管理平臺獲取API Key。
    2. 客戶端發起請求,攜帶API Key:GET /api/data?api_key=abc123def456
    3. 服務端驗證Key是否存在、是否有效、是否有權限訪問該接口。
  • 優點:實現簡單,易于管理,可以方便地控制不同Key的權限和速率限制。
  • 缺點
    • Key是永久憑證,一旦泄露,攻擊者可以無限期使用,風險高。
    • 通常需要與HTTPS配合防止竊聽。
  • 適用場景:為第三方開發者提供的公開API(如Google Maps API、天氣API),服務器-to-服務器通信。

3. Cookie-Session 機制
  • 機制:這是傳統Web應用最常用的方式。
    1. 用戶登錄,服務端驗證憑證,在內存或數據庫(如Redis)中創建一個Session對象并生成一個唯一Session ID。
    2. 服務端通過響應頭 Set-Cookie 將Session ID返回給客戶端瀏覽器。
    3. 瀏覽器后續所有請求會自動通過 Cookie 請求頭攜帶此Session ID。
    4. 服務端根據Session ID查找對應的Session數據,從而識別用戶身份。
  • 優點:對瀏覽器兼容性極好,用戶體驗無縫。
  • 缺點
    • 擴展性差:在集群部署中,需要Session共享機制(如Redis),否則用戶請求落到不同服務器會無法識別。
    • CSRF攻擊:瀏覽器會自動攜帶Cookie,容易受到跨站請求偽造攻擊,需要額外措施(如CSRF Token)來防御。
    • 不利于跨域(CORS):對移動端/Native App不友好。
  • 適用場景:傳統的、有頁面的Web應用。

二、現代方式(主流推薦)

這類方式更適合現代分布式、前后端分離的架構。

4. JWT (JSON Web Token) - 無狀態Token
  • 機制
    1. 用戶登錄,服務端驗證成功后,將用戶信息(如userId)和過期時間等打包成一個JSON對象
    2. 密鑰對這個JSON對象進行簽名,生成一個字符串,這就是JWT(格式:Header.Payload.Signature)。
    3. 服務端將JWT返回給客戶端(通常通過Response Body,而不是Cookie)。
    4. 客戶端后續請求在 Authorization 頭中攜帶:Bearer <your.jwt.token>
    5. 服務端收到后,驗證簽名是否有效且未被篡改。驗證通過后,即可信任Payload中的用戶信息,無需查詢數據庫。
  • 優點
    • 無狀態/擴展性好:服務端不需要存儲Session,Token本身包含所有信息,非常適合分布式和微服務架構。
    • 跨域友好:易于在多種客戶端(瀏覽器、App、其他服務)間使用。
  • 缺點
    • Token一旦簽發,在有效期內無法廢止。除非等到其自然過期,或服務端配合黑名單機制(這又引入了狀態)。
    • Payload內容僅是Base64編碼,不能存放敏感信息
  • 適用場景前后端分離項目、移動端App、第三方API授權。是目前最流行的方案之一。

5. OAuth 2.0 / OpenID Connect - 授權框架
  • 機制:這是一個授權框架,而非簡單的協議。它定義了四種授權模式,最常用的是授權碼模式
    1. 用戶被重定向到認證服務器(如微信、GitHub、Google)進行登錄。
    2. 登錄成功后,認證服務器返回一個 授權碼(Code) 給客戶端。
    3. 客戶端(后臺服務)用授權碼和自己的client_secret去認證服務器換取 訪問令牌(Access Token)
    4. 客戶端使用Access Token訪問資源服務器的API(通過 Authorization: Bearer <token>)。
  • OpenID Connect (OIDC) 是建立在OAuth 2.0之上的身份認證層,在換取Access Token的同時還會返回一個 ID Token(一個JWT),其中包含了用戶的身份信息。
  • 優點
    • 安全:避免了第三方應用接觸到用戶的密碼。
    • 標準:行業金標準,被各大廠廣泛支持。
    • 解耦:將身份認證和資源訪問分離。
  • 缺點:流程復雜,理解和實現成本較高。
  • 適用場景
    • 第三方登錄(“用微信/Google賬號登錄”)。
    • 允許第三方應用在用戶授權后訪問用戶數據的API(例如“XX應用想獲取你的GitHub頭像和郵箱”)。

總結與選擇指南

方式

安全性

擴展性

適用場景

推薦度

Basic Auth

低 (需HTTPS)

內部簡單系統、設備認證

??

API Key

中 (需HTTPS)

服務器間通信、公開API

???

Cookie-Session

中 (需防CSRF)

低 (需Session共享)

傳統有狀態Web應用

???

JWT

高 (需HTTPS)

極高 (無狀態)

前后端分離、移動端、微服務

?????

OAuth 2.0

極高

極高

第三方登錄、開放平臺授權

?????

如何選擇?

  1. 如果是前后端分離的現代應用(如Vue/React + Node.js/Java):首選 JWT
  2. 如果需要實現“第三方社交登錄”:必須使用 OAuth 2.0 (授權碼模式)
  3. 如果是提供給外部開發者的開放API:使用 API Key 進行客戶端識別,并結合 OAuth 2.0JWT 進行用戶授權。
  4. 如果是傳統的服務器渲染Web項目(如JSP, PHP):使用 Cookie-Session 最簡單自然。
  5. 永遠記住:任何在網絡上傳輸敏感憑證的方式(如Basic Auth、API Key、JWT),都必須使用 HTTPS 來保證通道安全。

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

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

相關文章

DIC技術極端環境案例分享:系泊鏈在海水環境下氫脆化性能測試

實驗結果的具體視頻可詳見以下鏈接&#xff1a;研索儀器DIC技術在極端條件下的應用 01 海水環境&#xff1a; DIC技術在海水環境下的應用核心挑戰在于惡劣的光學條件&#xff08;如散射、衰減、畸變&#xff09;、嚴酷的化學/生物環境&#xff08;腐蝕、生物污損&#xff09;…

DL00291-聯邦學習以去中心化鋰離子電池健康預測模型完整實現

聯邦學習在鋰離子電池健康預測中的應用&#xff1a;去中心化訓練與客戶選擇策略在鋰離子電池健康預測領域&#xff0c;隨著電池使用環境的多樣化以及電池狀態監測需求的不斷增長&#xff0c;傳統的集中式數據訓練方法逐漸顯現出局限性。為了解決數據隱私保護和大規模數據集中處…

TCP協議大全

什么是TCP&#xff1f;基本定義與屬性TCP&#xff08;傳輸控制協議&#xff09;是傳輸層的重要協議&#xff0c;具有面向連接&#xff08;傳輸前需先建立連接&#xff0c;是發送方和接收方的點對點一對一連接&#xff09;、基于字節流&#xff08;以字節流形式傳輸數據&#xf…

當硅基生命遇見碳基萌寵:Deepoc具身智能如何重新定義“寵物監護者”

在東京某高級公寓里&#xff0c;一只布偶貓正優雅地踱步到智能喂食器前。令人驚訝的是&#xff0c;這個通體雪白的喂食器突然"活"了過來——它微微傾斜身體&#xff0c;用柔和的機械音發出問候&#xff0c;同時伸出仿生機械臂輕輕撫過貓咪的背部。這不是科幻電影場景…

線上日志排查問題

1、查異常堆棧 顯示該行及其后面的50行內容&#xff0c;然后通過 less 命令進行分頁查看 grep -A 50 "NullPointerException" a.log | less參數解釋&#xff1a; grep: 文本搜索命令-A 50: After 的意思&#xff0c;顯示匹配行后面的50行“NullPointerException”: 要…

LabVIEW與CAN開發燃料電池監控

?基于 LabVIEW 與 CAN 總線技術&#xff0c;構建了一套多組質子交換膜燃料電池&#xff08;PEMFC&#xff09;堆監控系統。系統采用優質硬件設備&#xff0c;通過 LabVIEW 的圖形化編程能力實現數據采集、實時監控與多堆切換控制&#xff0c;穩定可靠&#xff0c;為燃料電池性…

CVPR焦點 | 神經網絡新范式:輕量化與精度并行,重塑視覺任務性能天花板

關注gongzhonghao【CVPR頂會精選】神經網絡卷積想找新亮點&#xff1f;不妨考慮&#xff1a;動態結構設計。作為深度學習架構搜索與高效建模兩大熱點的結合&#xff0c;動態神經網絡憑借自適應推理與高效特征利用的優勢&#xff0c;在視覺識別、視頻理解等任務中脫穎而出&#…

機器學習之集成算法學習

一、集成學習概述集成學習&#xff08;ensemble learning&#xff09;通過構建并結合多個個體學習器來完成學習任務&#xff0c;核心思想是 “集眾家之長”—— 就像多個專家共同判斷往往比單個專家更可靠。其關鍵在于如何生成多樣化的個體學習器并設計有效的結合策略。結合策略…

Unreal Engine UE_LOG

Unreal&#x1f3ae; Unreal Engine - UE_LOG&#x1f4dd; 定義&#x1f3db; 類/宏關聯? 關鍵特性&#x1f6e0;? 常見配置&#x1f4da; 使用方法&#x1f527; 基礎語法&#x1f50d; 示例&#x1fa82; 典型應用場景&#x1f517; 與其他組件對比?? 常見問題與注意事項…

Halcon那些事:什么是動態閾值,如何用dyn_threshold分割圖片

Halcon那些事:什么是動態閾值,如何用dyn_threshold分割圖片 一、什么是動態閾值?為什么需要它? 1. 傳統全局閾值的局限性 2. 動態閾值的核心思想 二、Halcon 中的核心算子:`dyn_threshold` 1. 算子原型 2. 參數詳解 三、工作原理(數學模型) 四、詳細使用步驟與實例 五、關…

Go初級二

Go初級入門&#xff08;二&#xff09;&#xff1a;變量、常量與數據類型 大家好&#xff0c;歡迎來到《Go初級入門》系列的第二篇&#xff01;在上一篇文章中&#xff0c;我們介紹了如何安裝Go環境并運行第一個“Hello, World”程序。今天&#xff0c;我們將深入Go語言的基礎語…

《戰神:諸神黃昏》v1.0.668中文版,索尼大作,PC平臺體驗諸神黃昏

[游戲名稱]: 《戰神&#xff1a;諸神黃昏》v1.0.668中文版 [軟件大小]: 175 GB [軟件大小]: 夸克網盤 游戲介紹 《戰神&#xff1a;諸神黃昏》是由索尼制作并發行的動作冒險游戲&#xff0c;作為《戰神4》的正統續作&#xff0c;它繼續了奎托斯與阿特柔斯的神話之旅。在諸神…

AI賦能環保精準治理:AI水質監測溯源快、空氣質量預測施策準,守護生態新效能

傳統環境保護工作長期受限于 “污染監測滯后”“溯源難度大”“治理方案針對性弱” 的問題&#xff0c;而 AI 技術的深度應用&#xff0c;正讓環保工作從 “被動應對” 轉向 “主動預判”&#xff0c;既能實時捕捉污染蹤跡&#xff0c;還能精準制定治理方案&#xff0c;讓生態保…

yolo訓練實例(一)

yolo官網 https://github.com/ultralytics/ultralytics?tabreadme-ov-file 下載python和解除限制 https://www.python.org/downloads/windows/ Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" -Name "LongPathsEnabled"…

STM32-BKP備份寄存器與RTC實時時鐘

引言本文主要從BKP備份寄存器和RTC實時時鐘的原理&#xff0c;特性及應用三個方面展開討論&#xff0c;解析它們在STM32中的獨特價值&#xff0c;助力開發者更好的掌握和運用它們。BKP備份寄存器的定義STM32的BKP備份寄存器是一種特殊的存儲單元&#xff0c;它位于備份區域&…

Linux網絡服務(五)——FTP服務詳解與實踐操作手冊

文章目錄前言一、FTP服務概述1.1 FTP基本定義1.2 VSFTP模式分類1.3 FTP端口作用二、FTP作用與工作原理&#xff08;重點&#xff09;2.1 FTP的作用、模式及通信方式2.1.1 FTP核心作用2.1.2 VSFTP模式與通信協議2.2 FTP工作原理與流程2.2.1 主動模式工作原理2.2.2 被動模式工作原…

5.3 包管理工具 npm yarn pnpm 對比

基本介紹 工具發布時間開發者定位npm2010 年npm Inc / OpenJS FoundationNode.js 官方包管理器Yarn2016 年Facebook&#xff08;現 Meta&#xff09;更快、更可靠的替代方案pnpm2016 年Zoltan Kochan高性能、節省磁盤空間 一、核心機制與設計差異 1. npm&#xff08;Node Pa…

爬蟲基礎學習-授權認證,cookie認證,異常處理

驗證&#xff1a; HTTPBasicAuthHandler&#xff08;用戶基本的身份驗證處理&#xff09; HTTPPasswordMgrWithDefaultRealm&#xff08;經常和authhandler一起出現&#xff09;#創建一個密碼管理器 password_mgr urllib.request.HTTPPasswordMgrWithDefaultRealm() #添加進目…

開發避坑指南(34):mysql深度分頁查詢優化方案

問題語句 SELECT* FROMt_order_log l WHERE1 1 AND l.create_time > 2024-08-28 AND l.create_time < 2024-09-04 23:59:59 LIMIT 10000,10上述查詢sql&#xff0c;即使create_time字段已建立索引&#xff0c;但偏移量達到幾十萬時候&#xff0c;查詢耗時將近1分鐘&…

Unreal Engine UFloatingPawnMovement

Unreal? Unreal Engine - UFloatingPawnMovement&#x1f3f7; 定義&#x1f9e9; 類繼承關系?? 關鍵特性&#x1f6e0;? 常見配置&#xff08;Details 面板/代碼&#xff09;&#x1f4dd; 使用方法1) 在 Pawn 中添加組件&#xff08;C&#xff09;2) 綁定輸入與驅動移動3…