介紹:
單一登入 (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中文網其他相關文章!

JVM的工作原理是將Java代碼轉換為機器碼並管理資源。 1)類加載:加載.class文件到內存。 2)運行時數據區:管理內存區域。 3)執行引擎:解釋或編譯執行字節碼。 4)本地方法接口:通過JNI與操作系統交互。

JVM使Java實現跨平台運行。 1)JVM加載、驗證和執行字節碼。 2)JVM的工作包括類加載、字節碼驗證、解釋執行和內存管理。 3)JVM支持高級功能如動態類加載和反射。

Java應用可通過以下步驟在不同操作系統上運行:1)使用File或Paths類處理文件路徑;2)通過System.getenv()設置和獲取環境變量;3)利用Maven或Gradle管理依賴並測試。 Java的跨平台能力依賴於JVM的抽象層,但仍需手動處理某些操作系統特定的功能。

Java在不同平台上需要進行特定配置和調優。 1)調整JVM參數,如-Xms和-Xmx設置堆大小。 2)選擇合適的垃圾回收策略,如ParallelGC或G1GC。 3)配置Native庫以適應不同平台,這些措施能讓Java應用在各種環境中發揮最佳性能。

Osgi,Apachecommonslang,JNA和JvMoptionsareeForhandlingForhandlingPlatform-specificchallengesinjava.1)osgimanagesdeppedendendencenciesandisolatescomponents.2)apachecommonslangprovidesitorityfunctions.3)

JVMmanagesgarbagecollectionacrossplatformseffectivelybyusingagenerationalapproachandadaptingtoOSandhardwaredifferences.ItemploysvariouscollectorslikeSerial,Parallel,CMS,andG1,eachsuitedfordifferentscenarios.Performancecanbetunedwithflagslike-XX:NewRa

Java代碼可以在不同操作系統上無需修改即可運行,這是因為Java的“一次編寫,到處運行”哲學,由Java虛擬機(JVM)實現。 JVM作為編譯後的Java字節碼與操作系統之間的中介,將字節碼翻譯成特定機器指令,確保程序在任何安裝了JVM的平台上都能獨立運行。

Java程序的編譯和執行通過字節碼和JVM實現平台獨立性。 1)編寫Java源碼並編譯成字節碼。 2)使用JVM在任何平台上執行字節碼,確保代碼的跨平台運行。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

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

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

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

Dreamweaver CS6
視覺化網頁開發工具