Keycloak 與 Spring Boot:實現單一登入的終極指南
介紹:
單一登入 (SSO) 已成為現代 Web 應用程式的重要功能,可增強使用者體驗和安全性。這份綜合指南將引導您完成使用 Keycloak 和 Spring Boot 實現 SSO,為您的應用程式提供強大的身份驗證和授權解決方案。
SSO 與 Keycloak 的重要性
單一登入 (SSO) 對於簡化身分驗證流程、增強安全性和改善使用者體驗至關重要。以下是一些主要好處:
集中驗證:SSO 允許使用者進行一次身份驗證並獲得多個應用程式的存取權限。 Keycloak 提供對使用者身分的集中管理,這在具有大量應用程式的環境中非常有用。
提高安全性:透過集中身分管理,可以統一執行安全性原則(如密碼強度、雙重認證和帳戶鎖定策略)。 Keycloak 對 OpenID Connect 和 OAuth 2.0 等協定的支援確保了強大的現代安全標準。
減少密碼疲勞並增強使用者體驗:透過僅登入一次,使用者可以避免密碼疲勞和多個憑證,從而使跨應用程式的互動更加順暢和更快。
可擴充性和靈活性:Keycloak的設定可以支援大量使用者和多個身分提供者,包括社群登入(Google、Facebook等)和企業目錄(LDAP、Active Directory )。
自訂和可擴展性:Keycloak 允許自訂主題、登入流程和擴展,使其能夠適應各種需求。它也是開源的,為組織提供了根據需要修改或擴展平台的靈活性。
單一登入 (SSO) 的替代方案:-
多重登入/傳統驗證:
- 使用者對每個應用程式或服務都有單獨的憑證
- 需要單獨登入每個系統
- 每個應用程式管理自己的身份驗證
-
聯合身分:
- 與 SSO 類似,但允許跨不同組織進行身份驗證
- 使用 SAML 或 OpenID Connect 等標準
- 使用者的身分由其所屬組織驗證
-
多重驗證 (MFA):
- 除了使用者名稱和密碼之外還增加了額外的安全層
- 可以與 SSO 或傳統驗證一起使用
- 通常涉及您知道、擁有和正在的事物
單一登入流程說明:
在深入實施之前,讓我們先了解 SSO 流程:
先決條件:
- Java 17 或更高版本
- Maven
- Docker(用於運行 Keycloak)
第 1 步:項目設置
建立一個新的 Spring Boot 項目,其架構如下:
keycloak-demo/ ├── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── bansikah/ │ │ │ └── keycloakdemo/ │ │ │ ├── config/ │ │ │ │ └── SecurityConfig.java │ │ │ ├── controller/ │ │ │ │ └── FoodOrderingController.java │ │ │ └── KeycloakDemoApplication.java │ │ └── resources/ │ │ ├── templates/ │ │ │ ├── home.html │ │ │ └── menu.html │ │ └── application.yml ├── docker-compose.yml └── pom.xml
注意:
bansikah 是我的名字嗎?所以你可以把你的或你想要的任何東西當作例子......
步驟2:設定pom.xml
將以下依賴項新增至您的 pom.xml 中,或者您可以僅替換依賴項部分以避免衝突:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-oauth2-client</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-oauth2-resource-server</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/org.thymeleaf.extras/thymeleaf-extras-springsecurity3 --> <dependency> <groupId>org.thymeleaf.extras</groupId> <artifactId>thymeleaf-extras-springsecurity3</artifactId> <version>3.0.5.RELEASE</version> </dependency> </dependencies>
第 3 步:使用 Docker 設定 Keycloak
在根目錄建立docker-compose.yml檔案:
version: '3' services: keycloak: image: quay.io/keycloak/keycloak:latest environment: KEYCLOAK_ADMIN: admin KEYCLOAK_ADMIN_PASSWORD: admin ports: - "8088:8080" command: - start-dev app: build: . ports: - "8082:8082" depends_on: - keycloak
使用以下命令執行 Keycloak 伺服器:
docker-compose up -d
步驟4:配置Keycloak
-
存取 Keycloak 管理控制台:
- 訪問http://localhost:8088
- 使用 admin/admin 作為使用者名稱和密碼登入
-
建立一個新領域:
- 前往左上角的「大師」
- 選擇「新增領域」
- 將其命名為食品訂購領域
- 點選「建立」
-
建立新客戶端:
在第一個畫面:- 將「客戶端 ID」設定為「food-ordering-client」
- 客戶端類型:選擇「OpenID Connect」
- 點選「下一步」
在下一個畫面(功能配置):
- 客戶端身份驗證:開啟此選項(這將取代舊的「機密」設定)
- 授權:除非您需要細微授權,否則可以將其關閉
- 點選「下一步」
- 客戶端配置:
- 將根 URL 設定為 http://localhost:8082/
- 將存取類型設定為機密
- 新增有效的重定向 URI(每個 URI 佔新行):
http://localhost:8082/ http://localhost:8082/menu http://localhost:8082/login/oauth2/code/keycloak
- 設定網路來源: http://本地主機:8082
- 點選「儲存」
- 檢索客戶端金鑰:
- 前往「憑證」標籤
- 複製 Secret 欄位的值以在應用程式設定中使用
- 建立使用者:
- 前往使用者並點選「新增使用者」
- 設定使用者名稱(例如 testuser)
- 在「憑證」標籤中:
- 設定密碼
- 停用「暫時」
並設定密碼:
步驟5:配置Spring Boot應用程式
在 src/main/resources 建立 application.yml:
keycloak-demo/ ├── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── bansikah/ │ │ │ └── keycloakdemo/ │ │ │ ├── config/ │ │ │ │ └── SecurityConfig.java │ │ │ ├── controller/ │ │ │ │ └── FoodOrderingController.java │ │ │ └── KeycloakDemoApplication.java │ │ └── resources/ │ │ ├── templates/ │ │ │ ├── home.html │ │ │ └── menu.html │ │ └── application.yml ├── docker-compose.yml └── pom.xml
取代
注意:
在生產中或作為一個好的實踐,最好將敏感資訊保存在專案根目錄的.env 檔案中,並將其用作配置中的變量,類似於${CLIENT_SECRET}當您啟動應用程式時從.env 檔案中選擇它,這也適用於重定向、發行者uri 和其餘內容..
第 6 步:建立安全性配置
在 src/main/java/com/bansikah/keycloakdemo/config 中建立 SecurityConfig.java:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-oauth2-client</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-oauth2-resource-server</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/org.thymeleaf.extras/thymeleaf-extras-springsecurity3 --> <dependency> <groupId>org.thymeleaf.extras</groupId> <artifactId>thymeleaf-extras-springsecurity3</artifactId> <version>3.0.5.RELEASE</version> </dependency> </dependencies>
第7步:建立控制器
在 src/main/java/com/bansikah/keycloakdemo/controller 中建立 FoodOrderingController.java:
version: '3' services: keycloak: image: quay.io/keycloak/keycloak:latest environment: KEYCLOAK_ADMIN: admin KEYCLOAK_ADMIN_PASSWORD: admin ports: - "8088:8080" command: - start-dev app: build: . ports: - "8082:8082" depends_on: - keycloak
第 8 步:建立 HTML 模板
在 src/main/resources/templates 建立 home.html:
docker-compose up -d
在 src/main/resources/templates 建立 menu.html:
http://localhost:8082/ http://localhost:8082/menu http://localhost:8082/login/oauth2/code/keycloak
第 9 步:運行應用程式
您應該能夠透過此 URL http://localhost:8082 存取應用程序,並且您應該看到此
當您點擊此處連結時,您將進入 keycloak 表單,使用者必須在 foodorder 領域下使用使用者名稱和密碼進行身份驗證
通過身份驗證後您將看到選單頁面
現在有了 SSO 的重要性,即使我註銷,我也不必再次登錄,如下
然後我可以再次單擊該鏈接,系統將不會提示我再次輸入我的密碼和用戶名,如下所示
結論
恭喜? ,感謝您到目前為止的跟進
此實作示範了使用 Keycloak 和 Spring Boot 的強大 SSO 解決方案。它提供無縫的身份驗證體驗,同時保持安全。該配置允許輕鬆自訂和擴展,以滿足特定的應用程式需求。
如果您遇到任何問題或對此實施有疑問,請隨時在下面發表評論。請記得查看 Spring Security 和 Keycloak 文件以取得更進階的配置和功能。
github 上的程式碼連結
參考:
- 春季靴
- 鑰匙斗篷
- Java 17
- Maven
- 碼頭工人
以上是Keycloak 與 Spring Boot:實現單一登入的終極指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

公司安全軟件導致部分應用無法正常運行的排查與解決方法許多公司為了保障內部網絡安全,會部署安全軟件。 ...

將姓名轉換為數字以實現排序的解決方案在許多應用場景中,用戶可能需要在群組中進行排序,尤其是在一個用...

系統對接中的字段映射處理在進行系統對接時,常常會遇到一個棘手的問題:如何將A系統的接口字段有效地映�...

在使用IntelliJIDEAUltimate版本啟動Spring...

在使用MyBatis-Plus或其他ORM框架進行數據庫操作時,經常需要根據實體類的屬性名構造查詢條件。如果每次都手動...

Java對象與數組的轉換:深入探討強制類型轉換的風險與正確方法很多Java初學者會遇到將一個對象轉換成數組的�...

電商平台SKU和SPU表設計詳解本文將探討電商平台中SKU和SPU的數據庫設計問題,特別是如何處理用戶自定義銷售屬...

Redis緩存方案如何實現產品排行榜列表的需求?在開發過程中,我們常常需要處理排行榜的需求,例如展示一個�...
