隔離這幾天開發了一個帶控制台的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
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...