停更這些天,業餘時間和粉絲羣的幾個大佬合作寫了一個基於Spring Authorization Server的OAuth2授權服務器的管理控制檯項目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
截圖
說這麼多,不如放一些圖更直觀。
簡單用法
- 拉取主分支最新代碼到本地。
- 通過
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提供H2和Mysql兩種數據庫環境,分別對應application-h2.yml
和application-mysql.yml
兩個配置文件。
- H2,默認數據庫,在H2環境下,數據庫DDL腳本和DML腳本會自動執行,無需開發者手動執行,該環境主要用來測試、研究、學習。
- Mysql,生產推薦,首次啓動時開發者手動執行初始化DML腳本。
目前兩種環境的效果是一致的,切換時務必在
pom.xml
中更換對應的數據庫驅動程序依賴。
願景
這個項目希望能夠幫助大家學習和使用OAuth2,目前項目主線功能已經完成,配置生成器和OIDC相關的功能正在跟進。希望大家多多支持,star一下。通過issues多提BUG,多提需求。
關注公衆號:Felordcn 獲取更多資訊