首頁 > Java > java教程 > Keycloak 與 Spring Boot:實現單一登入的終極指南

Keycloak 與 Spring Boot:實現單一登入的終極指南

Mary-Kate Olsen
發布: 2024-11-03 23:10:30
原創
462 人瀏覽過

介紹:

單一登入 (SSO) 已成為現代 Web 應用程式的重要功能,可增強使用者體驗和安全性。這份綜合指南將引導您完成使用 Keycloak 和 Spring Boot 實現 SSO,為您的應用程式提供強大的身份驗證和授權解決方案。

SSO 與 Keycloak 的重要性

單一登入 (SSO) 對於簡化身分驗證流程、增強安全性和改善使用者體驗至關重要。以下是一些主要好處:

  1. 集中驗證:SSO 允許使用者進行一次身份驗證並獲得多個應用程式的存取權限。 Keycloak 提供對使用者身分的集中管理,這在具有大量應用程式的環境中非常有用。

  2. 提高安全性:透過集中身分管理,可以統一執行安全性原則(如密碼強度、雙重認證和帳戶鎖定策略)。 Keycloak 對 OpenID Connect 和 OAuth 2.0 等協定的支援確保了強大的現代安全標準。

  3. 減少密碼疲勞並增強使用者體驗:透過僅登入一次,使用者可以避免密碼疲勞和多個憑證,從而使跨應用程式的互動更加順暢和更快。

  4. 可擴充性和靈活性:Keycloak的設定可以支援大量使用者和多個身分提供者,包括社群登入(Google、Facebook等)和企業目錄(LDAP、Active Directory )。

  5. 自訂和可擴展性:Keycloak 允許自訂主題、登入流程和擴展,使其能夠適應各種需求。它也是開源的,為組織提供了根據需要修改或擴展平台的靈活性。
    單一登入 (SSO) 的替代方案:

  6. 多重登入/傳統驗證:

    • 使用者對每個應用程式或服務都有單獨的憑證
    • 需要單獨登入每個系統
    • 每個應用程式管理自己的身份驗證
  7. 聯合身分:

    • 與 SSO 類似,但允許跨不同組織進行身份驗證
    • 使用 SAML 或 OpenID Connect 等標準
    • 使用者的身分由其所屬組織驗證
  8. 多重驗證 (MFA):

    • 除了使用者名稱和密碼之外還增加了額外的安全層
    • 可以與 SSO 或傳統驗證一起使用
    • 通常涉及您知道、擁有和正在的事物

單一登入流程說明:

在深入實施之前,讓我們先了解 SSO 流程:

Keycloak and Spring Boot: The Ultimate Guide to Implementing Single Sign-On

先決條件:

  • 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

  1. 存取 Keycloak 管理控制台:

    • 訪問http://localhost:8088
    • 使用 admin/admin 作為使用者名稱和密碼登入
  2. 建立一個新領域:

    • 前往左上角的「大師」
    • 選擇「新增領域」
    • 將其命名為食品訂購領域
    • 點選「建立」
  3. 建立新客戶端:
    在第一個畫面:

    • 將「客戶端 ID」設定為「food-ordering-client」
    • 客戶端類型:選擇「OpenID Connect」
    • 點選「下一步」

在下一個畫面(功能配置):

  • 客戶端身份驗證:開啟此選項(這將取代舊的「機密」設定)
  • 授權:除非您需要細微授權,否則可以將其關閉
  • 點選「下一步」
  1. 客戶端配置:
    • 將根 URL 設定為 http://localhost:8082/
    • 將存取類型設定為機密
    • 新增有效的重定向 URI(每個 URI 佔新行):
 http://localhost:8082/
 http://localhost:8082/menu
 http://localhost:8082/login/oauth2/code/keycloak
登入後複製
登入後複製
  • 設定網路來源: http://本地主機:8082
  • 點選「儲存」

Keycloak and Spring Boot: The Ultimate Guide to Implementing Single Sign-On

  1. 檢索客戶端金鑰:
    • 前往「憑證」標籤
    • 複製 Secret 欄位的值以在應用程式設定中使用

Keycloak and Spring Boot: The Ultimate Guide to Implementing Single Sign-On

  1. 建立使用者:
    • 前往使用者並點選「新增使用者」
    • 設定使用者名稱(例如 testuser)
    • 在「憑證」標籤中:
      • 設定密碼
      • 停用「暫時」

Keycloak and Spring Boot: The Ultimate Guide to Implementing Single Sign-On
並設定密碼:

Keycloak and Spring Boot: The Ultimate Guide to Implementing Single Sign-On

步驟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
登入後複製
登入後複製

取代從 Keycloak 複製的秘密,通常是一些隨機文字。
注意:

在生產中或作為一個好的實踐,最好將敏感資訊保存在專案根目錄的.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 and Spring Boot: The Ultimate Guide to Implementing Single Sign-On
當您點擊此處連結時,您將進入 keycloak 表單,使用者必須在 foodorder 領域下使用使用者名稱和密碼進行身份驗證

Keycloak and Spring Boot: The Ultimate Guide to Implementing Single Sign-On

通過身份驗證後您將看到選單頁面

Keycloak and Spring Boot: The Ultimate Guide to Implementing Single Sign-On

現在有了 SSO 的重要性,即使我註銷,我也不必再次登錄,如下

Keycloak and Spring Boot: The Ultimate Guide to Implementing Single Sign-On
然後我可以再次單擊該鏈接,系統將不會提示我再次輸入我的密碼和用戶名,如下所示

Keycloak and Spring Boot: The Ultimate Guide to Implementing Single Sign-On

結論

恭喜? ,感謝您到目前為止的跟進
此實作示範了使用 Keycloak 和 Spring Boot 的強大 SSO 解決方案。它提供無縫的身份驗證體驗,同時保持安全。該配置允許輕鬆自訂和擴展,以滿足特定的應用程式需求。
如果您遇到任何問題或對此實施有疑問,請隨時在下面發表評論。請記得查看 Spring Security 和 Keycloak 文件以取得更進階的配置和功能。
github 上的程式碼連結

參考:

  • 春季靴
  • 鑰匙斗篷
  • Java 17
  • Maven
  • 碼頭工人

以上是Keycloak 與 Spring Boot:實現單一登入的終極指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板