隔離這幾天開發了一個帶控制台的OAuth2授權伺服器分享給大家

来源:https://www.cnblogs.com/felordcn/archive/2022/05/12/16262719.html
-Advertisement-
Play Games

停更這些天,業餘時間和粉絲群的幾個大佬合作寫了一個基於Spring Authorization Server的OAuth2授權伺服器的管理控制台項目Id Server,我覺得這個項目能夠大大降低OAuth2授權伺服器使用難度。可以讓你很方便地去管理OAuth2客戶端信息,甚至可以一鍵生成OAuth2 ...


停更這些天,業餘時間和粉絲群的幾個大佬合作寫了一個基於Spring Authorization ServerOAuth2授權伺服器的管理控制台項目Id Server,我覺得這個項目能夠大大降低OAuth2授權伺服器使用難度。可以讓你很方便地去管理OAuth2客戶端信息,甚至可以一鍵生成OAuth2配置文件。接下來簡單介紹一下Id Server這個項目。

項目地址:https://github.com/NotFound403/id-server 記得Star一下。

主要功能

  • 開箱即用,簡單配置後即可使用。
  • 創建OAuth2客戶端,並對OAuth2客戶端進行管理。
  • 提供OAuth2授權服務。
  • 支持四種客戶端認證方式:
    • CLIENT_SECRET_BASIC
    • CLIENT_SECRET_POST
    • CLIENT_SECRET_JWT
    • PRIVATE_KEY_JWT
  • 支持三種OAuth2授權方式:
    • AUTHORIZATION_CODE
    • CLIENT_CREDENTIALS
    • REFRESH_TOKEN
  • OIDC 1.0的支持(完善中)。
  • 一鍵生成配置yaml文件(正在開發中)。
  • 提供UI控制台,降低上手成本。
  • 可動態調整管理員的用戶角色,對授權伺服器進行按鈕功能級別的許可權控制。

主要技術

  • Spring Boot
  • Spring Security
  • Spring Authorization Server
  • Spring Data JPA
  • layui
  • thymeleaf
  • 資料庫
    • H2
    • Mysql

截圖

說這麼多,不如放一些圖更直觀。

控制台台登錄
首頁
通過UI創建OAuth2客戶端
創建管理用戶
角色授權
授權登錄
授權確認

簡單用法

  • 拉取主分支最新代碼到本地。
  • 通過IdServerApplication來啟動授權伺服器。管理控制台本地登錄路徑為http://localhost:9000/system/login,最高許可權用戶為root,密碼為idserver
  • 你可以通過root用戶做這些事情:
    • 創建角色(角色管理)併為角色綁定許可權。
    • 創建控制台管理用戶(用戶管理),並賦予他們角色。

退出功能還未完善,需要通過關閉瀏覽器來清除session。

OAuth2 測試方法

  • 啟動Id Server,預設情況下在客戶端列表提供了一個內置的OAuth2客戶端。
  • 樣例客戶端在samples文件夾下,直接啟動,瀏覽器配置文件下的http://127.0.0.1:8082/foo/bar,進入登錄頁,輸入用戶名user和密碼user即可。
  • 你也可以在Id Server中創建一個客戶端並模仿DEMO中的配置,主要修改client-id,client-secret,client-authentication-method,scope,其它選項除非你比較瞭解OAuth2,否則先不要動,也可以通過issue咨詢。

redirect-uri必須在授權伺服器Id Server註冊客戶端時聲明。

如何替換內置用戶user

首先要正確區分管理用戶和普通用戶這兩個概念。

管理用戶

root及其創建的用戶為UI控制台的管理用戶,超級管理員root是目前提供了一個預設用戶,具有Id Server的最高許可權。如果你需要自定義,可實現RootUserDetailsService介面並註入Spring IoC

普通用戶

普通用戶就是OAuth2中的資源擁有者,主要對OAuth2客戶端的授權請求進行授權。預設提供了一個user用來演示,開發者可以實現OAuth2UserDetailsService介面並註入Spring IoC來自定義用戶的來源。

多環境

目前Id Server提供H2Mysql兩種資料庫環境,分別對應application-h2.ymlapplication-mysql.yml兩個配置文件。

  • H2,預設資料庫,在H2環境下,資料庫DDL腳本和DML腳本會自動執行,無需開發者手動執行,該環境主要用來測試、研究、學習。
  • Mysql,生產推薦,首次啟動時開發者手動執行初始化DML腳本

目前兩種環境的效果是一致的,切換時務必在pom.xml中更換對應的資料庫驅動程式依賴。

願景

這個項目希望能夠幫助大家學習和使用OAuth2,目前項目主線功能已經完成,配置生成器和OIDC相關的功能正在跟進。希望大家多多支持,star一下。通過issues多提BUG,多提需求。

關註公眾號:Felordcn 獲取更多資訊

個人博客:https://felord.cn

博主:碼農小胖哥
出處:felord.cn
本文版權歸原作者所有,不可商用,轉載需要聲明出處,否則保留追究法律責任的權利。如果文中有什麼錯誤,歡迎指出。以免更多的人被誤導。

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • C++自定義迭代器:介紹了【什麼時候需要用到自定義迭代器】和【如何實現自定義迭代器】。 ...
  • 環境 python 版本3.6.4 gevent 1.5.0 gunicorn 20.1.0 錯誤 RecursionError: maximum recursion depth exceeded while calling a Python object 錯誤原因 根據錯誤棧,出問題的代碼在pyt ...
  • 前言 **基礎篇鏈接:**https://www.cnblogs.com/xiegongzi/p/16229678.html 3.9、延遲隊列 - 重要 3.9.1、延遲隊列概念 這個玩意兒要表達的意思其實已經見過了,就是死信隊列中說的TTL消息過期,但是文字表達得換一下 所謂的延遲隊列:就是用來存 ...
  • AQS源碼探究 競爭鎖資源 我們進入ReentrantLock源碼中查看其內部類 Sync 對AQS進行擴展公共方法並定義抽象方法的抽象類 FaireSync 實現公平鎖的AQS的實現類 UnFairSync 實現非公平鎖的ASQ的實現類 我使用例子進行的debug,然後一步一步看源碼。例子在文章最 ...
  • 前言 大麥網是中國綜合類現場娛樂票務營銷平臺,業務覆蓋演唱會、 話劇、音樂劇、體育賽事等領域今天,我們要用代碼來實現他的購票過程 先來看看完成後的效果是怎麼樣的 對於本篇文章有疑問的同學可以加【資料白嫖、解答交流群:753182387】 開發環境 版 本:anaconda(python3.8.8) ...
  • 以前我們定義類都是用class關鍵詞,但從Java 16開始,我們將多一個關鍵詞record,它也可以用來定義類。record關鍵詞的引入,主要是為了提供一種更為簡潔、緊湊的final類的定義方式。 下麵就來具體瞭解record類的細節。配套視頻教程:Java 16 新特性:使用record聲明類 ...
  • Spring Ioc源碼分析系列--Ioc容器BeanFactoryPostProcessor後置處理器分析 前言 上一篇文章Spring Ioc源碼分析系列--Ioc源碼入口分析已經介紹到Ioc容器的入口refresh()方法,並且分析了refresh()方法裡面的前三個子方法分析了一下。還記得分 ...
  • Predicate<T>:常用的四個方法 boolean test(T t):對給定的參數進行判斷(判斷邏輯由Lambda表達式實現),返回一個布爾值 default Predicate<T>negate():返回一個邏輯的否定,對應邏輯非 default Predicate<T>and(Predi ...
一周排行
    -Advertisement-
    Play Games
  • 1、簡述 binlog 二進位日誌文件,這個文件記錄了MySQL所有的DML操作。通過binlog日誌我們可以做數據恢復,增量備份,主主複製和主從複製等等。 2、Docker中無法使用vim問題解決 https://blog.csdn.net/Tomwildboar/article/details/ ...
  • 對於 MySQL 資料庫作為各個業務系統的存儲介質,在系統中承擔著非常重要的職責,如果資料庫崩了,那麼對於讀和寫資料庫的操作都會受到影響。如果不能迅速恢復,對業務的影響是非常大的。本文我將分享MySQL 雙主 + Keepalived 的高可用落地和踩坑之路。 ...
  • 寫在前面: 這幾天留校,在做一個電機驅動的項目,使用的是合肥傑發的平臺,車規級晶元AC7801/11系列晶元。 但在進行模擬和程式燒錄的時候遇到了各種問題,藉助這個機會,私下裡總結了常見的模擬與燒錄程式常見的幾種方式,以及相關的操作,希望對大家有幫助。 單片機ISP、IAP和ICP幾種燒錄方式的區別 ...
  • ## 電腦性能設置 優化設置一:開啟卓越性能 其實,win10系統中有一個卓越性能的隱藏設置,它可以讓我們的電腦,在現有配置的情況下,發揮出最優良的性能。 1、 同時按住“win+R”打開運行視窗,輸入“powershell”並點擊“確定” 2、 打開命令提示符頁面後,輸入並執行以下字元,就會出現 ...
  • 2022年6月初合宙新上市了 Air32F103 系列 MCU, 分 Air32F103CBT6 和 Air32F103CCT6 兩個型號, 分別是 32K RAM + 128K FLASH 和 32K RAM + 256K FLASH, 支持的最高主頻216MHz, 可以Pin2Pin替換STM3... ...
  • 痞子衡嵌入式半月刊: 第 57 期 這裡分享嵌入式領域有用有趣的項目/工具以及一些熱點新聞,農曆年分二十四節氣,希望在每個交節之日準時發佈一期。 本期刊是開源項目(GitHub: JayHeng/pzh-mcu-bi-weekly),歡迎提交 issue,投稿或推薦你知道的嵌入式那些事兒。 上期回顧 ...
  • 用例演示 - 創建實體 本節將演示一些示例用例並討論可選場景。 創建實體 從實體/聚合根類創建對象是實體生命周期的第一步。聚合/聚合根規則和最佳實踐部分 建議為Entity類創建一個主構造函數,以保證創建一個有效的實體。因此,無論何時我們需要創建實體的實例,我們都應該使用那個構造函數 參見下麵的問題 ...
  • 領域邏輯 & 應用邏輯 如前所述,領域驅動設計中的業務邏輯分為兩部分(層):領域邏輯和應用邏輯: 領域邏輯由系統的核心領域規則組成,應用邏輯實現應用特定的用例 雖然定義很明確,但實現起來可能並不容易。您可能無法決定哪些代碼應該位於應用程式層,哪些代碼應該位於領域層。本節試圖解釋其中的差異 多個應用程 ...
  • 表弟大學快畢業了,學了一個學期Python居然還不會寫學生管理系統,真的給我丟臉啊,教他又不肯學,還讓我直接給他寫,我真想兩巴掌上去,最終還是寫了給他,誰讓他是我表弟呢,關鍵時候還是得幫他一把! 寫完了放在那也是放著,所以今天分享給大家吧! 話不多說,咱們直接開始吧! 代碼解析 一、登錄頁面 1、定 ...
  • Zookeeper3.7源碼剖析 能力目標 掌握Zookeeper中Session的管理機制 能基於Client進行Debug測試Session創建/刷新操作 能搭建Zookeeper集群源碼配置 掌握集群環境下Leader選舉啟動過程 能說出Zookeeper選舉過程中的概念 能說出Zookeep ...