單一登入 (SSO) 已成為現代 Web 應用程式的重要功能,可增強使用者體驗和安全性。這份綜合指南將引導您完成使用 Keycloak 和 Spring Boot 實現 SSO,為您的應用程式提供強大的身份驗證和授權解決方案。
單一登入 (SSO) 對於簡化身分驗證流程、增強安全性和改善使用者體驗至關重要。以下是一些主要好處:
集中驗證:SSO 允許使用者進行一次身份驗證並獲得多個應用程式的存取權限。 Keycloak 提供對使用者身分的集中管理,這在具有大量應用程式的環境中非常有用。
提高安全性:透過集中身分管理,可以統一執行安全性原則(如密碼強度、雙重認證和帳戶鎖定策略)。 Keycloak 對 OpenID Connect 和 OAuth 2.0 等協定的支援確保了強大的現代安全標準。
減少密碼疲勞並增強使用者體驗:透過僅登入一次,使用者可以避免密碼疲勞和多個憑證,從而使跨應用程式的互動更加順暢和更快。
可擴充性和靈活性:Keycloak的設定可以支援大量使用者和多個身分提供者,包括社群登入(Google、Facebook等)和企業目錄(LDAP、Active Directory )。
自訂和可擴展性:Keycloak 允許自訂主題、登入流程和擴展,使其能夠適應各種需求。它也是開源的,為組織提供了根據需要修改或擴展平台的靈活性。
單一登入 (SSO) 的替代方案:
多重登入/傳統驗證:
聯合身分:
多重驗證 (MFA):
在深入實施之前,讓我們先了解 SSO 流程:
建立一個新的 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 是我的名字嗎?所以你可以把你的或你想要的任何東西當作例子......
將以下依賴項新增至您的 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>
在根目錄建立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
存取 Keycloak 管理控制台:
建立一個新領域:
建立新客戶端:
在第一個畫面:
在下一個畫面(功能配置):
http://localhost:8082/ http://localhost:8082/menu http://localhost:8082/login/oauth2/code/keycloak
並設定密碼:
在 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 和其餘內容..
在 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>
在 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
在 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
您應該能夠透過此 URL http://localhost:8082 存取應用程序,並且您應該看到此
當您點擊此處連結時,您將進入 keycloak 表單,使用者必須在 foodorder 領域下使用使用者名稱和密碼進行身份驗證
通過身份驗證後您將看到選單頁面
現在有了 SSO 的重要性,即使我註銷,我也不必再次登錄,如下
然後我可以再次單擊該鏈接,系統將不會提示我再次輸入我的密碼和用戶名,如下所示
恭喜? ,感謝您到目前為止的跟進
此實作示範了使用 Keycloak 和 Spring Boot 的強大 SSO 解決方案。它提供無縫的身份驗證體驗,同時保持安全。該配置允許輕鬆自訂和擴展,以滿足特定的應用程式需求。
如果您遇到任何問題或對此實施有疑問,請隨時在下面發表評論。請記得查看 Spring Security 和 Keycloak 文件以取得更進階的配置和功能。
github 上的程式碼連結
參考:
以上是Keycloak 與 Spring Boot:實現單一登入的終極指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!