SpringBoot實戰(三十五)微服務集成OAuth2.0(UAA)

目錄

    • 一、知識回顧
      • 1.1 什么是 OAuth2 協議?
      • 1.2 OAuth2 的4個角色
      • 1.3 OAuth2 的3種令牌
      • 1.4 OAuth2 的5種認證方式
      • 1.5 OAuth2 內置接口地址
    • 二、UAA介紹
      • 2.1 概述
      • 2.2 UAA的主要功能
      • 2.3 UAA 的應用場景
    • 三、微服務集成
      • 3.1 集成示例介紹
      • 3.2 集成測試

一、知識回顧

在進行微服務集成前,我們先來回顧一下 OAuth2.0 的基礎知識。

1.1 什么是 OAuth2 協議?

OAuth2(Open Authorization 2.0) 協議是 RFC 6749 文件,是一種 用于授權的開放標準協議,用于通過第三方應用程序訪問用戶在某個服務提供商上存儲的資源,而無需共享用戶的憑證(例如用戶名和密碼)。

OAuth 引入了一個授權層,用來分離兩種不同的角色:客戶端和資源所有者。…資源所有者同意以后,資源服務器可以向客戶端頒發令牌。客戶端通過令牌,去請求數據。

OAuth2.0 的運行流程如下圖所示:

在這里插入圖片描述

(A)用戶打開客戶端以后,客戶端要求用戶給予授權。
(B)用戶同意給予客戶端授權。
(C)客戶端使用上一步獲得的授權,向認證服務器申請令牌。
(D)認證服務器對客戶端進行認證以后,確認無誤,同意發放令牌。
(E)客戶端使用令牌,向資源服務器申請獲取資源。
(F)資源服務器確認令牌無誤,同意向客戶端開放資源。

簡而言之:你要獲取我(資源服務器)的資源的話,得先找他(授權服務器)授權。

1.2 OAuth2 的4個角色

OAuth2.0 認證過程中,涉及到的四個角色如下 :

  • 客戶端(Client):代表資源所有者與授權服務器進行交互的應用程序。可以是Web應用程序、移動應用程序或第三方服務。
  • 資源所有者(Resource Owner):即用戶或系統的代表,擁有受保護資源的所有權。
  • 授權服務器(Authorization Server):負責驗證資源所有者的身份并頒發訪問令牌(Access Token)給客戶端。它通常是一個獨立的服務器,可以與資源服務器分離或合并。
  • 資源服務器(Resource Server):存儲受保護的資源,并根據令牌的有效性進行訪問控制。資源服務器可以是一個或多個服務,可以授權服務器分離或合并。

1.3 OAuth2 的3種令牌

  • 授權許可(Authorization Grant):資源所有者授權客戶端訪問受保護資源的憑證,如:授權碼、隱式授權、密碼授權、客戶端憑證等。
  • 令牌(Access Token):用于標識授權許可的憑證,包括訪問令牌、刷新令牌和身份令牌等。
  • 令牌端點(Token Endpoint):客戶端與授權服務器交互以獲取或刷新令牌的API端點。

1.4 OAuth2 的5種認證方式

OAuth2.0 提供了五種認證方式:

授權類型grant_type適用場景安全性
授權碼模式authorization_code有后端的 Web 應用
簡化模式implicit純前端應用(如 SPA)
密碼模式password高度信任的客戶端(如第一方應用)
客戶端憑證模式client_credentials客戶端訪問自己的資源(M2M)
刷新令牌模式refresh_token獲取新的訪問令牌

這里我們舉例的是 授權碼模式,篇幅有限,沒有集成數據庫。如果需要支持其他模式,需要對 AuthorizationConfig.java 中的內容進行改造。

1.5 OAuth2 內置接口地址

OAuth2.0 內置了6個接口地址,如下所示:

  • /oauth/authorize:授權端點(核心)
  • /oauth/token:獲取令牌端點(核心)
  • /oauth/confirm_access:用戶確認授權提交端點
  • /oauth/error:授權服務錯誤信息端點
  • /oauth/check_token:用于資源服務訪問的令牌解析端點
  • /oauth/token_key:提供公有密匙的端點,如果你使用JWT令牌的話

二、UAA介紹

  • 官方文檔: https://docs.spring.io/spring-cloud-dataflow-samples/docs/current/reference/html/_security.html

2.1 概述

UAA(User Account and Authentication) 是 Cloud Foundry 提供的一個用戶賬戶和認證服務,主要用于管理用戶的身份驗證和授權。UAA 支持多種認證機制,包括 Oauth2.0、OpenID Connect 等,能夠為應用程序提供安全的用戶管理和訪問控制功能。UAA 的 核心功能是為用戶提供統一的身份驗證服務,并確保只有經過授權的用戶才能訪問特定的資源。

2.2 UAA的主要功能

UAA 的主要功能如下:

  1. 用戶管理:UAA 允許管理員創建、管理和刪除用戶賬戶。用戶可以通過用戶名和密碼進行登錄,也可以通過其他身份提供者(如 LDAP、SAML 等)進行身份驗證。
  2. OAuth2.0支持:UAA 實現了 OAuth2 協議,允許應用程序通過 OAuth2 進行授權和認證。OAuth2 是一種廣泛使用的授權框架,允許用戶授權第三方應用訪問其資源,而無需共享其憑據。
  3. OpenID Connect支持:UAA 還支持 OpenID Connect,這是一種基于 OAuth2 的身份驗證協議,允許應用程序驗證用戶的身份并獲取用戶的基本信息。
  4. 多租戶支持:UAA 支持多租戶架構,允許不同的組織或團隊在同一 UAA 實例中管理各自的用戶和權限。
  5. LDAP 集成:UAA 可以與 LDAP(輕量級目錄訪問協議)集成,允許企業使用現有的 LDAP 目錄服務進行用戶認證。通過 LDAP 集成,UAA 可以從 LDAP 服務器中獲取用戶信息,并將其映射到 UAA 中的用戶角色和權限。

2.3 UAA 的應用場景

UAA 廣泛應用于需要用戶認證和授權的場景,特別是在微服務架構中。通過 UAA,開發者可以輕松地為多個微服務提供統一的身份驗證和授權機制,而不需要每個服務都實現自己的認證邏輯。

Spring Cloud Data Flow 中,UAA 被用于保護數據流和任務的管理接口。通過 UAA,管理員可以控制哪些用戶可以創建、部署和管理數據流和任務。UAA 還可以與 LDAP 集成,使得企業可以使用現有的 LDAP 目錄服務來管理用戶權限。


三、微服務集成

代碼地址: https://gitee.com/acgkaka/SpringBootExamples/tree/master/springboot-mybatis-plus-oauth2.0

3.1 集成示例介紹

在示例項目中,包含兩個核心服務:

  1. demo-eureka: 注冊中心;
  2. demo-gateway: 網關中心;
  3. auth-server: 鑒權服務 – 相當于 “授權服務器”;
  4. **user-center: **用戶服務 – 相當于 “資源服務器”。

包含五個基礎啟動包:

  1. common-spring-boot-starter: 基礎公共包;
  2. jdbc-spring-boot-starter: JDBC數據庫連接工具包;
  3. redis-spring-boot-starter: Redis緩存連接工具包;
  4. uaa-client-spring-boot-starter: “資源服務器” 工具包
  5. uaa-server-spring-boot-starter: “授權服務器” 工具包

整體項目目錄結構如下:

在這里插入圖片描述

“資源服務器” 工具包 uaa-client-spring-boot-starter 目錄結構如下:

在這里插入圖片描述

注意: 為了實現分布式鑒權,這里我們將token存到了redis緩存中。

“授權服務器” 工具包 uaa-server-spring-boot-starter 目錄結構如下:

在這里插入圖片描述

3.2 集成測試

1)啟動本地redis和數據庫,確保 mydb.sql 中的數據已被初始化。

2)啟動所有服務,如下所示:

在這里插入圖片描述

3)在 user-center 服務中,有測試接口:/user/list,如下所示:

在這里插入圖片描述

我們直接使用 Postman 請求這個接口,如下所示:

在這里插入圖片描述

可以看到,HTTP返回狀態碼為 401,返回內容中提示 unauthorized,沒有權限,說明攔截成功。

4)在 auth-server 服務中,OAuth 2.0 默認的獲取授權接口為:/oauth/token,如下所示:

在這里插入圖片描述

我們輸入相應的入參進行請求 token,這里我們以密碼模式為例。如下所示:

  • 請求地址: http://localhost:8081/oauth/token?grant_type=password&username=ACGkaka&password=123456&client_id=app&client_secret=app

在這里插入圖片描述

這里我們成功獲取到了 token。

5)將 token 作為鑒權請求頭,再次請求 user-center 中的接口,如下所示:

在這里插入圖片描述

可以看到,原本被攔截的接口已經可以正常訪問了,HTTP狀態碼也正常返回200了。

代碼地址: https://gitee.com/acgkaka/SpringBootExamples/tree/master/springboot-mybatis-plus-oauth2.0

整理完畢,完結撒花~🌻

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

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

相關文章

紅果短劇安卓+IOS雙端源碼,專業短劇開發公司

給大家拆解一下紅果短劇/河馬短劇,這種看光解鎖視頻,可以掙金幣的短劇APP。給大家分享一個相似的短劇APP源碼,這個系統已接入穿山甲廣告、百度廣告、快手廣告、騰訊廣告等,類似紅果短劇的玩法,可以看劇賺錢&#xff0c…

從0開始的操作系統手搓教程23:構建輸入子系統——實現鍵盤驅動1——熱身驅動

目錄 所以,鍵盤是如何工作的 說一說我們的8042 輸出緩沖區寄存器 狀態寄存器 控制寄存器 動手! 注冊中斷 簡單整個鍵盤驅動 Reference ScanCode Table 我們下一步就是準備進一步完善我們系統的交互性。基于這個,我們想到的第一個可以…

百度SEO關鍵詞布局從堆砌到場景化的轉型指南

百度SEO關鍵詞布局:從“堆砌”到“場景化”的轉型指南 引言 在搜索引擎優化(SEO)領域,關鍵詞布局一直是核心策略之一。然而,隨著搜索引擎算法的不斷升級和用戶需求的多樣化,傳統的“關鍵詞堆砌”策略已經…

Python ? Unix時間戳轉日期或日期轉時間戳工具分享

設計一款Unix時間戳和日期轉換工具,其代碼如下: from datetime import datetimeclass Change_Date_Time(object):def __init__(self, date_strNone, date_numNone):self.date_str date_strself.date_num date_num# 轉時間戳def datetime2timestamp(s…

【目標檢測】【NeuralPS 2023】Gold-YOLO:通過收集與分發機制實現的高效目標檢測器

Gold-YOLO: Efficient Object Detector via Gather-and-Distribute Mechanism Gold-YOLO:通過收集與分發機制實現的高效目標檢測器 0.論文摘要 在過去的幾年中,YOLO系列模型已成為實時目標檢測領域的領先方法。許多研究通過修改架構、增強數…

π0源碼解析——一個模型控制7種機械臂:對開源VLA sota之π0源碼的全面分析,含我司的部分落地實踐

前言 ChatGPT出來后的兩年多,也是我瘋狂寫博的兩年多(年初deepseek更引爆了下),比如從創業起步時的15年到后來22年之間 每年2-6篇的,干到了23年30篇、24年65篇、25年前兩月18篇,成了我在大模型和具身的原始技術積累 如今一轉眼…

K8s 1.27.1 實戰系列(六)Pod

一、Pod介紹 1、Pod 的定義與核心設計 Pod 是 Kubernetes 的最小調度單元,由一個或多個容器組成,這些容器共享網絡、存儲、進程命名空間等資源,形成緊密協作的應用單元。Pod 的設計靈感來源于“豌豆莢”模型,容器如同豆子,共享同一環境但保持隔離性。其核心設計目標包括…

企業日常工作中常用的 Linux 操作系統命令整理

Linux 操作系統命令整理 在企業級運維、開發和日常工作中,Linux 命令是繞不開的核心技能。不論是日志排查、進程管理,還是高效運維優化,掌握這些命令都能讓你事半功倍!本篇文章整理了自己在日常工作中積累最常用的 Linux 命令&am…

實現NTLM relay攻擊工具的Python代碼示例

以下是一個實現NTLM relay攻擊工具的Python代碼示例,該工具可以完成自動掃描IP、配置相關協議、獲取hash、自動化設置和執行攻擊步驟等功能。 代碼思路 IP掃描:使用scapy庫進行IP掃描,找出活躍的IP地址。Responder配置:自動配置…

Kotlin和Java區別

哈哈哈,前段時間,面試的時候,突然問到我Kotlin和Java的區別,一下子把我問懵逼了,確實沒遇到問這個的,想了下,說了下Kotlin的編譯時空檢查機制,代碼更簡潔,很多封裝好的AP…

【大模型】大模型分類

大模型(Large Models)通常指參數量巨大、計算能力強大的機器學習模型,尤其在自然語言處理(NLP)、計算機視覺(CV)等領域表現突出。以下是大模型的常見分類方式: 1. 按應用領域分類 …

centos中使用svn整理

centos中使用svn整理 1. 安裝 SVN 客戶端2. 常見 SVN 用法及示例2.1 創建 SVN 倉庫2.2 檢出(Checkout)項目2.3 添加文件到版本控制2.4 提交(Commit)更改2.5 更新(Update)本地工作副本2.6 查看文件狀態2.7 查…

游戲元宇宙崛起:AI代理IP驅動虛擬世界“無限可能”?

在科技飛速發展的當下,游戲元宇宙正以一種前所未有的姿態崛起,它猶如一顆璀璨的新星,吸引著無數人的目光。而AI代理IP,正成為驅動這個虛擬世界展現“無限可能”的關鍵力量。 「快代理|11年專注企業級代理IP云服務 —…

基于Servlet + JSP 的物業管理系統

Javaweb物業管理系統|Java|Servlet | JavaWeb|web網站| 分管理員登錄,用戶登錄。 一、內容 項目源碼 配套文檔 環境部署教程 項目運行教程 二、技術介紹 技術應用: Servlet JavaBean CSS JSP 開發環…

Billing的patient balance的2個例子

Billing的patient balance的2個例子 第一個例子 下面是 0852醫院的00005641的計算: 主保險 Allowable: 78.81 Applied:61.79 CoInsurance:17.02 第二保險 Allowable: 15.76 Applied:15.76 我們在計算時是用主保險的Allowable: 78.81&#xff…

哪些培訓課程適合學習PostgreSQL中級認證知識?

PostgreSQL 中級工程師 PGCP 認證培訓:由重慶思 莊經驗豐富的講師鄭全老師授課。課程內容系統全面,涵蓋了 PostgreSQL 數據庫從基礎到高級的知識,包括數據庫的安裝、建庫、用戶與角色管理等基礎內容,也有性能調優、索引原理與應用…

計算機二級MS之PPT

聲明:跟著大貓和小黑學習隨便記下一些筆記供大家參考,二級考試之前將持續更新,希望大家二級都能輕輕松松過啦,過了二級的大神也可以在評論區留言給點建議,感謝大家!! 文章目錄 考題難點1cm25px…

第5章 使用OSSEC進行監控(網絡安全防御實戰--藍軍武器庫)

網絡安全防御實戰--藍軍武器庫是2020年出版的,已經過去3年時間了,最近利用閑暇時間,抓緊吸收,總的來說,第5章開始進入主機安全(HIDS)領域了,2022年的時候有幸做過終端安全一段時間&a…

Android 低功率藍牙之BluetoothGattCallback回調方法詳解

BluetoothGattCallback 是 Android 中用于處理藍牙低功耗(BLE)設備通信的核心回調類。它負責處理與 BLE 設備的連接、服務發現、數據讀寫等操作的結果。以下是對 BluetoothGattCallback 的詳細解析: 1. onConnectionStateChange 觸發時機&am…

DeepSeek group-limited expert routing和負載均衡

Ref https://github.com/deepseek-ai/DeepSeek-V3/blob/main/inference/model.py GitHub - deepseek-ai/EPLB: Expert Parallelism Load Balancer DeepSeek-V3 Technical Report DeepSeek的路由方法 class Gate(nn.Module):def __init__(self, args: ModelArgs):super().__…