spring security oauth2.0的四種模式

OAuth 2.0 定義了 4 種授權模式(Grant Type),用于不同場景下的令牌獲取。以下是每種模式的詳細說明、適用場景和對比:


一、授權碼模式(Authorization Code Grant)

適用場景

? Web 應用(有后端服務器)
? 移動端應用(需安全存儲 client_secret
? 最安全的模式,推薦公開客戶端使用

流程
用戶 客戶端 授權服務器 資源服務器 訪問客戶端 重定向到授權服務器 登錄并授權 重定向回客戶端(攜帶授權碼 code) 傳遞 code 用 code 換取令牌(client_id + client_secret) 返回訪問令牌(access_token)和刷新令牌(refresh_token) 用 access_token 訪問資源 用戶 客戶端 授權服務器 資源服務器
特點

? 令牌不暴露給瀏覽器(通過后端交換)
? 支持 refresh_token
? 需預注冊 redirect_uri 防止釣魚攻擊


二、隱式模式(Implicit Grant)

適用場景

? 單頁應用(SPA) 或純前端應用
? 無后端服務器的場景
? 已被 OAuth 2.1 廢棄(建議用授權碼模式 + PKCE 替代)

流程
用戶 客戶端 授權服務器 資源服務器 訪問客戶端 重定向到授權服務器 登錄并授權 重定向回客戶端(URL 片段攜帶 access_token) 前端提取 access_token 用 access_token 訪問資源 用戶 客戶端 授權服務器 資源服務器
特點

? 直接返回 access_token(無中間授權碼)
? 令牌通過 URL 片段傳遞(前端可見,存在泄露風險)
? 不支持 refresh_token


三、密碼模式(Resource Owner Password Credentials Grant)

適用場景

? 受信任的客戶端(如公司內部系統)
? 用戶需直接在客戶端輸入用戶名/密碼
? 高風險,僅限無法使用其他模式的場景

流程
用戶 客戶端 授權服務器 資源服務器 輸入用戶名和密碼 發送用戶名、密碼、client_id、client_secret 返回 access_token 和 refresh_token 用 access_token 訪問資源 用戶 客戶端 授權服務器 資源服務器
特點

? 用戶需向客戶端暴露密碼(違反最小權限原則)
? 僅適用于高信任度環境(如內部系統)
? 支持 refresh_token


四、客戶端憑證模式(Client Credentials Grant)

適用場景

? 服務器到服務器的通信(無用戶參與)
? 機器對機器(M2M)認證
? 訪問與用戶無關的公共資源

流程
客戶端 授權服務器 資源服務器 發送 client_id 和 client_secret 返回 access_token 用 access_token 訪問資源 客戶端 授權服務器 資源服務器
特點

? 無用戶參與
? 令牌權限范圍由客戶端注冊時決定
? 不支持 refresh_token


五、模式對比與選型指南

模式安全性適用客戶端類型是否需要用戶參與令牌存儲位置
授權碼模式?????Web 應用、移動端(有后端)后端安全存儲
隱式模式??SPA(已過時)前端存儲(高風險)
密碼模式?受信任的內部系統后端存儲
客戶端憑證模式????服務器到服務器后端安全存儲

六、最佳實踐

  1. 優先使用授權碼模式(尤其是公開客戶端)
  2. 避免隱式模式(OAuth 2.1 已廢棄,改用 PKCE 增強的授權碼模式)
  3. 密碼模式僅限高信任環境(如公司內部工具)
  4. 客戶端憑證模式用于 M2M 場景(如定時任務、API 網關)
  5. 強制 HTTPS 防止令牌泄露

七、Spring Security 中實現示例

授權碼模式配置(Google 登錄):
# application.yml
spring:security:oauth2:client:registration:google:client-id: your-client-idclient-secret: your-client-secretauthorization-grant-type: authorization_coderedirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}"
客戶端憑證模式配置:
@Bean
public OAuth2AuthorizedClientManager authorizedClientManager(ClientRegistrationRepository clientRegistrationRepository,OAuth2AuthorizedClientRepository authorizedClientRepository) {OAuth2ClientCredentialsGrantRequestEntityConverter converter = new OAuth2ClientCredentialsGrantRequestEntityConverter();DefaultClientCredentialsTokenResponseClient client = new DefaultClientCredentialsTokenResponseClient();client.setRequestEntityConverter(converter);AuthorizedClientServiceOAuth2AuthorizedClientManager manager = new AuthorizedClientServiceOAuth2AuthorizedClientManager(clientRegistrationRepository, authorizedClientRepository);manager.setAuthorizedClientProvider(new ClientCredentialsOAuth2AuthorizedClientProvider());return manager;
}

通過理解這四種授權模式,您可以根據具體場景選擇最合適的認證流程,平衡安全性與用戶體驗。

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

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

相關文章

Oracle 排除交集數據 MINUS

MINUS 是 Oracle 數據庫中的一種集合操作符,用于返回第一個查詢結果中存在但第二個查詢結果中 不存在 的 唯一行。其核心功能是 排除交集數據,常用于數據差異分析或過濾特定記錄 一、核心功能 排除交集:返回第一個查詢結果中 不在第二個查詢結…

WiFi那些事兒(四)

目錄 一、IEEE 802.11ah標準簡介 二、IEEE 802.11ah信道特點 三、IEEE 802.11ah傳輸模式 在WiFi通信領域,信號繞射能力一直是一個關鍵問題。常規的WiFi設備多工作在2.4GHz和5GHz頻段,這些頻段的電磁波波長通常小于障礙物尺寸,受電磁波本身…

C++在Linux上生成動態庫并調用接口測試

加減乘除demo代碼 項目結構 CPP/ ├── calculator.cpp ├── calculator.h ├── main.cpp 頭文件 #ifndef CALCULATOR_H #define CALCULATOR_H#ifdef __cplusplus extern "C" {#endifdouble add(double a, double b);double subtract(double a, double b…

離線密碼生成器:安全可靠的密碼管理解決方案

離線密碼生成器:安全可靠的密碼管理解決方案 在當今數字時代,我們每天都需要使用各種網站和應用程序,每個賬戶都需要一個強密碼來保護我們的個人信息和隱私。然而,記住多個復雜的密碼幾乎是不可能的任務。今天,我要向…

ChatRex: Taming Multimodal LLM for Joint Perception and Understanding 論文理解和翻譯

一、TL;DR MLLM在感知方面存在不足(遠遠比不上專家模型),比如Qwen2-VL在coco上recall只有43.9%提出了ChatRex,旨在從模型設計和數據開發兩個角度來填補這一感知能力的缺口ChatRex通過proposal邊界框輸入到LLM中將其轉…

自動駕駛技術-相機_IMU時空標定

自動駕駛技術-相機_IMU時空標定 時間延遲 時間延遲 參考鏈接1、2 相機主要分為全局和卷簾快門相機,從觸發到成像的過程包括:復位時間、AE()曝光時間、讀出時間 全局快門如下圖所示 卷簾快門如下圖所示 相機錄制視頻時,為了保持固定頻率&am…

Vue3 + Vite + TS,使用 Web Worker,web worker進階 hooks

worker 具體通訊方式 1.由 web page 發送消息- worker.postMessage(發送數據) 2.web worker 接收消息并執行相關邏輯- onmessage (e) > { 接收數據并處理邏輯postMessage(傳遞處理后的數據)} 3.由 web page 監聽 worker 消息,包括:- 處理數據的監聽…

AIDD-人工智能藥物設計-AI 精準預測蛋白質變構位點

Allo-PED: AI 精準預測蛋白質變構位點 目錄 Allo-PED 框架融合蛋白質語言模型與結構特征,顯著提高了變構位點預測的準確性和泛化能力。EcoFoldDB 利用蛋白質結構信息,為宏基因組提供了精確且可擴展的生態功能注釋新方法,顯著提升了對未知微生物功能的認知。上下文分子適配(…

1558 找素數

1558 找素數 ??難度:中等 🌟考點:質數 📖 📚 import java.util.Scanner; import java.util.Arrays;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int a sc.…

Nacos 提供了哪些服務的保護機制?

當面試官問這個問題時,大家一定要保持頭腦清醒,不要被帶跑偏了,Nacos 本身的核心定位是服務發現和配置管理中心,它并不直接提供像服務熔斷、服務限流、服務降級、請求重試 這類完整的、開箱即用的客戶端/網關級服務保護&#xff0…

【家政平臺開發(38)】解鎖家政平臺國際化密碼:多語言支持開發實戰

> 本【家政平臺開發】專欄聚焦家政平臺從 0 到 1 的全流程打造。從前期需求分析,剖析家政行業現狀、挖掘用戶需求與梳理功能要點,到系統設計階段的架構選型、數據庫構建,再到開發階段各模塊逐一實現。涵蓋移動與 PC 端設計、接口開發及性能優化,測試階段多維度保障平臺質…

DirectX12 - 基本知識 - 圖形驅動的本質

這里是SunshineBooming,GPU公司一枚小小的Driver工程師,主要工作是寫DirectX12 Driver,我會持續更新這個DX12 Spec系列,可能比較冷門,但是都是干貨和工作中的心得體會,有任何GPU相關的問題都可以在評論區互…

selenium元素獲取

from selenium import webdriver from selenium.webdriver.common.by import Bydriver webdriver.Chrome()driver.maximize_window()#最大化窗口 #隱式等待 driver.implicitly_wait(10)#打開網頁 driver.get("https://www.zhipin.com/beijing/?kacity-sites-101010100&q…

生物化學筆記:醫學免疫學原理15 超敏反應過敏反應(I型[蚊蟲叮咬]+II型[新生兒溶血癥、突眼型甲亢]+III型+IV型)

超敏反應 每個人都可能發生的過敏問題:被蚊子咬后起包 I型超敏反應 II型超敏反應 新生兒溶血癥分為Rh血型不合和ABO血型不合兩種情況。Rh血型不合通常從第二胎開始更容易發病,因為母體初次接觸Rh陽性胎兒的紅細胞后會產生抗D抗體,而這個致敏…

【android bluetooth 框架分析 02】【Module詳解 2】【gd_shim_module 模塊介紹】

1. 背景 上一章節 我們介紹了 module_t 的 大體框架 ,本節內容我們就選擇 我們的 gd_shim_module 模塊為例子,具體剖析一下,它里面的邏輯。 static const char GD_SHIM_MODULE[] "gd_shim_module";// system/main/shim/shim.cc …

【包管理器】主流包管理器_對比_應用場景

不定期更新,建議關注收藏點贊。 鏈接: npm專題 目錄 主流包管理器簡介對比 主流包管理器簡介 主流的包管理器其實有不少,不同語言和平臺都有各自的一套系統。 前端(JavaScript/TypeScript) 名稱簡介開發者特點npmNo…

參照Spring Boot后端框架實現序列化工具類

本文參照Jackson實現序列化工具類,旨在于簡化開發 JacksonUtil.class public class JacksonUtil {private JacksonUtil() {}/*** 單例*/private final static ObjectMapper OBJECT_MAPPER;static {OBJECT_MAPPER new ObjectMapper();}private static ObjectMappe…

Rust入門之迭代器(Iterators)

Rust入門之迭代器(Iterators) 本文已同步本人博客網站 本文相關源碼已上傳Github 前言 迭代器(Iterators)是 Rust 中最核心的工具之一,它不僅是遍歷集合的抽象,更是 Rust 零成本抽象(Zero-Co…

若依框架二次開發——RuoYi-AI 本地部署流程

文章目錄 項目環境安裝后端1. 下載項目2. 使用 IDEA 導入項目3. 配置 Maven4. 配置 Maven settings.xml5. 初始化數據庫6. 啟動 Redis7. 修改數據庫配置8. 啟動后端服務安裝管理端1. 下載管理端項目2. 安裝依賴3. 啟動管理端4. 修改管理端配置安裝用戶端1. 下載用戶端項目2. 安…

精品推薦-最新大模型MCP核心架構及最佳實踐資料合集(18份).zip

精品推薦-最新大模型MCP核心架構及最佳實踐資料合集,共18份。 1、2025年程序員必學技能:大模型MCP核心技術.pdf 2、MCP 架構設計剖析:從 Service Mesh 演進到 Agentic Mesh.pdf 3、MCP 架構設計深度剖析:使用 Spring AI MCP 四步…