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

碼農小胖哥發表於2022-05-12

停更這些天,業餘時間和粉絲群的幾個大佬合作寫了一個基於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

相關文章