【web 安全】從 HTTP 無狀態到現代身份驗證機制

文章目錄

  • Web 安全與系統設計
    • Web存在的問題:Web 是無狀態的
    • 解決方案
      • 一、早期解決方案:Session + Cookie 的誕生
      • 二、第二階段:Token 的出現(前后端分離 + 移動端的解決方案)
      • 三、分析總結:
        • 1.早期版本:session+cookie存在的問題分析
          • ①分布式服務
          • ②非瀏覽器和前后端分離場景
        • 2.總結

Web 安全與系統設計

Web存在的問題:Web 是無狀態的

HTTP 協議是“無狀態”的,意思是:每次請求都是獨立的,服務器不會自動記住“上一次是誰來的”。

舉例說明:
你訪問了電商首頁,下一步點進購物車,但服務器根本“不知道你是剛才那個訪問首頁的人”。

🚨 于是問題來了:

  • 登錄一次后,如何在后續請求中識別你是誰?
  • 登錄后你是“管理員”還是“普通用戶”,怎么讓系統知道?
  • 如何控制你能不能查看某些敏感信息?

這就是認證、授權、鑒權、Session、Cookie、Token、鑒權這些概念誕生的原因。

解決方案

一、早期解決方案:Session + Cookie 的誕生

Session

  • 服務端用來保存“用戶的登錄狀態”
  • 登錄后創建一個 session,里面保存用戶信息(比如用戶名、權限)

Cookie

  • 瀏覽器存儲的“小紙條”,由服務器發給客戶端
  • 瀏覽器下次訪問自動帶上,服務器通過它知道“你是誰”

Session + Cookie 工作流程:

  • 用戶登錄成功,服務器保存一個 Session(如:userId=1)
  • 服務器發送一個 Cookie:Set-Cookie: sessionId=abc123
  • 瀏覽器保存 Cookie
  • 后續每次請求都自動帶上 Cookie
  • 服務器根據 sessionId 找回用戶信息

場景適合:

  • 傳統網站:如早期的 JSP、PHP、ASP 網頁
  • 登錄狀態依賴服務端 Session 內存或 Redis

?? 問題:

  • Session 保存在服務端,不好擴展(如分布式服務)
  • 前后端不分離,適合頁面渲染型項目,不適合 App / 移動端

二、第二階段:Token 的出現(前后端分離 + 移動端的解決方案)

為什么需要 Token?

  • 前端 Vue/React,后端 SpringBoot 分開部署
  • 客戶端不能自動發送 Cookie(安全或跨域問題)
  • 希望服務器是無狀態的,方便橫向擴展、容災

什么是 Token?

  • 一段字符串,用來代表用戶身份
  • 登錄成功后由服務器生成,發給前端
  • 前端以后每次請求都帶上 Token(放在請求頭)

JWT(JSON Web Token):主流 Token 形式

  • 格式固定、支持加密、不易偽造
    -通常結構為三段:header.payload.signature

Token 登錄流程:

  • 用戶輸入賬號密碼,后端驗證成功
  • 后端生成 Token 返回前端
  • 前端存到 localStorage 或 sessionStorage
  • 每次請求都在請求頭加上 Token
  • 后端解析 Token,識別用戶身份

適合場景:

  • 前后端分離的 Web 系統
    -移動端、小程序、App
    -分布式系統、微服務架構

三、分析總結:

1.早期版本:session+cookie存在的問題分析
①分布式服務

早期session+cookie無法解決分布式服務的原因:
舉例如下:
你的服務不止部署在一臺服務器上,而是:

用戶請求 → 隨機到 A 服務器 或 B 服務器 或 C 服務器(負載均衡)

Session 是默認保存在“當前服務器內存中的”,也就是說:

  • 用戶第一次登錄 → 分配到 A 服務器 → A 創建了一個 Session
  • 用戶第二次請求 → 分配到 B 服務器 → B 根本沒有 A 上那個 Session!

結果:用戶雖然登錄了,但在 B 看來是“未登錄”,因為找不到 Session。

優雅解決:Token 模式
因為JWT 是“無狀態”的,后端服務使用同一套驗證機制。

驗證過程:

  • 用戶登錄后,生成的 JWT Token 本身就包含用戶信息(如 userId、role)
  • 后端只需驗證 Token 是否有效,就能識別身份,無需存任何會話
  • 不需要服務器保存登錄狀態:哪臺服務器收到請求都能獨立完成校驗 → 完全支持分布式!
②非瀏覽器和前后端分離場景

App、小程序不會自動攜帶 Cookie

  • Session 模式依賴瀏覽器自動發送 Cookie(尤其是跨頁面請求)
  • 但 App / 小程序 / Postman 這類非瀏覽器客戶端 不會自動管理 Cookie
  • 即使發送了,也很容易出現“session 丟失”、“登錄失效”等問題

前后端分離:

  • 前后端分離中,前端(如 localhost:8080)和后端(如 api.xx.com)是不同域名
  • 跨域訪問默認不會攜帶 Cookie

token優勢

Token 模式特點對應優勢
登錄后發一個 Token(如 JWT)不依賴 Cookie,跨域沒問題
Token 放在前端(localStorage、App 本地)多端可統一管理
每次請求手動帶上 Authorization: Bearer xxx客戶端完全控制,通用性強
服務端無狀態(不用保存登錄信息)更適合分布式架構、微服務系統
網關統一攔截 Token 驗證方便統一接入與安全控制
Token 結構中可附帶用戶信息(如 userId、role)減少服務端查詢
2.總結
項目Session + Cookie(傳統方式)Token(現代方式)
客戶端是否自動帶登錄信息? 瀏覽器自動帶 Cookie? 客戶端需手動加 Header
是否依賴瀏覽器? 是? 否,通用性強
是否易于跨域? 需特殊配置? 天然支持
是否需要服務端保存狀態? 需要? 無狀態
是否適合分布式架構? 不適合? 適合
是否適合前后端分離? 不適合? 非常適合
是否適合 App、小程序等? 不適合? 非常適合

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

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

相關文章

FlutterUnit TolyUI | 布局游樂場

FlutterUnit 基于 TolyUI 大大簡化了界面構建的代碼復雜程度,因此之前想要實現的一些小功能,就可以輕松支持。布局游樂場是通過交互的方式來 直觀體驗 組件的布局特性,從而更易學和掌握。目前 FlutterUnit 已在 知識集錄模塊新增了 布局寶庫&…

【數據分析一:Data Collection】信息檢索

本節內容含有各典型數據集的推薦,以及其網址,大家根據需要自取 一、檢索 最簡單、最靈活的數據獲取方式就是依靠檢索: Google:更適合搜索英文信息 Google Dataset Search(Google 數據集搜索) 網址&…

23.ssr和csr的對比?如何依賴node.js實現

1.為什么說ssr 的node中間層請求速度快。相當于內網? 那vue.js加載怎么沒有ssr和csr的說法啊 第一問:為什么說 SSR 的 Node 中間層請求速度快?是不是相當于內網? ? 是的,本質上就是「內網請求」,所以更快…

力扣刷題(第六十四天)

靈感來源 - 保持更新,努力學習 - python腳本學習 第一個錯誤的版本 解題思路 初始化左右邊界:左邊界 left 1,右邊界 right n。二分查找循環: 計算中間版本號 mid。若 mid 是錯誤版本,說明第一個錯誤版本在 [le…

【圖像處理入門】11. 深度學習初探:從CNN到GAN的視覺智能之旅

摘要 深度學習為圖像處理注入了革命性動力。本文將系統講解卷積神經網絡(CNN)的核心原理,通過PyTorch實現圖像分類實戰;深入解析遷移學習的高效應用策略,利用預訓練模型提升自定義任務性能;最后揭開生成對抗網絡(GAN)的神秘面紗,展示圖像生成與增強的前沿技術。結合代…

C++法則4: 如果一個構造函數的第一個參數是自身類類型的引用,且任何額外參數都有默認值,則此構造函數是拷貝構造函數。

C法則4: 如果一個構造函數的第一個參數是自身類類型的引用,且任何額外參數都有默認值,則此構造函數是拷貝構造函數。 拷貝構造函數的定義: 第一個參數是自身類類型的引用: 必須是引用(通常為const引用&…

從頭搭建環境安裝k8s遇到的問題

基本信息 master節點IP: 172.31.0.3 node01節點IP:172.31.0.4 node02節點IP:172.31.0.5 子網掩碼:255.255.0.0 網關:172.31.0.2 DNS:114.114.114.114 安裝前要檢查的信息 檢查三臺主機的mac地址是否重復&#xff1a…

Flask入門指南:從零構建Python微服務

1. Flask 是什么? Flask 是一個 微框架(Microframework),特點包括: 輕量靈活:核心僅包含路由和模板引擎,其他功能通過擴展實現易于學習:代碼直觀,適合快速開發小型應用…

【LINUX網絡】網絡socet接口的基本使用以及實現簡易UDP通信

根據本系列上兩篇關于網絡的初識介紹,現在我們開始實現一個UDP接口,以加強對該接口的理解。 1 . 服務器端 在本篇中,主要按照下面內容來實現: 創建并封裝服務端:了解創建服務端的基本步驟 創建并封裝客戶端&#xff0…

MySQL的索引事務

索引 是什么 類似于目錄,提高查詢的速度,但是本身會占用空間,增刪數據的時候也需要維護索引。所以查詢操作頻繁的時候可以創建索引。如果非條件查詢列,或經常做插入、修改操作,或磁盤空間不足時,不考慮創…

安卓9.0系統修改定制化____第三方美化 bug修復 移植相關 輔助工具 常識篇 八

在修改rom中。有時候不可避免的需要對系統進行美化以及一些第三方系統的bug修復。在操作前需要了解系統的一些基本常識。例如同平臺移植 跨平臺移植以及內核移植 apk反編譯等等相關的知識。今天解析的這款工具雖然不是直接面向安卓9.0.但對于了解以上的一些必備常識還是不錯的 …

云服務器與物理服務器對比:選擇最適合的業務服務器解決方案

更多云服務器知識,盡在hostol.com 在現代 IT 基礎設施中,云服務器與物理服務器是兩種常見的服務器解決方案。隨著云計算技術的迅猛發展,越來越多的企業開始轉向云服務器,但也有一些企業仍然堅持使用物理服務器,尤其是…

【redis使用場景——緩存——雙寫一致性】

redis使用場景——緩存——雙寫一致性 雙寫一致性問題的本質與場景典型不一致場景分析??并發寫操作導致的不一致????讀寫交叉導致的不一致????主從同步延遲導致的不一致?? 解決延遲雙刪策略(推薦)優點??:??缺點??&#xff…

【ArcGIS】在線影像底圖調用

【ArcGIS】在線影像底圖調用 一、 歷史影像的調用二、ArcGIS online底圖調用三、結語 一、 歷史影像的調用 ESRI官方推出了World Imagery Wayback是一個提供全球范圍內歷史影像的在線服務。 官網地址:https://livingatlas.arcgis.com/wayback/ 操作步驟&#xff1…

密度估計:從零星足跡重建整體畫像

想象你是一位偵探,案發現場只留下幾個零散的腳印。**如何通過這些碎片,推斷嫌疑人的身高體重?甚至預測他下一步的藏身之處?** 這種從局部反推整體的能力,正是**密度估計(Density Estimation)** …

B004基于STM32F401單片機簡易交通燈實訓數碼管顯示設計仿真資料

視頻演示地址:https://www.bilibili.com/video/BV1GvNDzFEd9/ 運行環境 仿真軟件:proteus8.17(切記別的版本不能運行) 編程軟件:MDK525 STM32 cubmx版本:6.11.1(切記別的版本不能運行) 原理圖畫圖軟件:AD10 功能說明: 以STM32F401CB單片機為核心簡易交通燈功能如下。…

沒掌握的知識點記錄

1、微內核的主要優點在于結構清晰、內核代碼量少,安全性和可靠性高、可移植性強、可伸縮性、可擴展性高;其缺點是難以進行良好的整體優化、進程間互相通信的開銷大、內核功能代碼不能被直接調用而帶來服務的效率低。 2、題目: 分頁內存管理…

linux 遠程終端執行qt應用顯示到接入的物理顯示器上

在顯示器打開終端執行: xhost local: 在遠程終端執行: export DISPLAY:0然后在終端執行qt應用就可以。 xhost local: 功能:允許本地用戶(local:)訪問 X 服務器(X11 圖形系統)。 原理&#xf…

【AI驅動網絡】

一、AI 驅動網絡 1.1 什么是網絡 1.1.1、網絡的定義 ?網絡是由若干節點?(如計算機、服務器、移動設備等)和連接這些節點的鏈路?(有線或無線傳輸介質)構成的系統,用于實現地理位置分散的獨立設備之間的信息交換、資源共享與協同工作。在計算機領域,網絡是信息傳輸、…

Python期末速成

一.基礎內容 賦值語句: a 1 b "mayday" 標識符規則: 1.字母,數字,下劃線,漢字組成。但數字不能開頭 2.不能是保留字 3.特殊符號不行,*¥^等 注釋是在語句前面加# …