ホームページ  >  記事  >  Java  >  Keycloak と Spring Boot: シングル サインオンを実装するための究極のガイド

Keycloak と Spring Boot: シングル サインオンを実装するための究極のガイド

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-03 23:10:30412ブラウズ

導入:

シングル サインオン (SSO) は、最新の Web アプリケーションに不可欠な機能となり、ユーザー エクスペリエンスとセキュリティの両方を強化しています。この包括的なガイドでは、Keycloak と Spring Boot を使用して SSO を実装する手順を説明し、アプリケーションに堅牢な認証および認可ソリューションを提供します。

KeycloakによるSSOの重要性

シングル サインオン (SSO) は、認証プロセスの合理化、セキュリティの強化、ユーザー エクスペリエンスの向上に不可欠です。主な利点の一部を次に示します:

  1. 集中認証: SSO により、ユーザーは 1 回の認証で複数のアプリケーションにアクセスできるようになります。 Keycloak は、ユーザー ID の一元管理を提供します。これは、多数のアプリケーションが存在する環境で役立ちます。

  2. セキュリティの向上: 一元的な ID 管理により、セキュリティ ポリシー (パスワード強度、2 要素認証、アカウント ロックアウト ポリシーなど) を均一に適用できます。 OpenID Connect や OAuth 2.0 などのプロトコルに対する Keycloak のサポートにより、堅牢で最新のセキュリティ標準が保証されます。

  3. パスワードの疲労の軽減とユーザー エクスペリエンスの向上: 一度ログインするだけで、ユーザーはパスワードの疲労や複数の認証情報を回避し、アプリケーション間でのやり取りがよりスムーズかつ高速になります。

  4. スケーラビリティと柔軟性: Keycloak の構成は、多数のユーザーと、ソーシャル ログイン (Google、Facebook など) やエンタープライズ ディレクトリ (LDAP、Active Directory) を含む複数の ID プロバイダーをサポートできます。

  5. カスタマイズと拡張性: Keycloak ではカスタムテーマ、ログインフロー、拡張機能を使用できるため、さまざまなニーズに適応できます。また、オープンソースでもあるため、組織は必要に応じてプラットフォームを変更または拡張できる柔軟性が得られます。
    シングル サインオン (SSO) の代替手段:

  6. 複数のサインオン/従来の認証:

    • ユーザーはアプリケーションまたはサービスごとに個別の資格情報を持っています
    • 各システムに個別にログインする必要があります
    • 各アプリケーションは独自の認証を管理します
  7. フェデレーション ID:

    • SSO に似ていますが、異なる組織間での認証が可能です
    • SAML や OpenID Connect などの標準を使用
    • ユーザーの身元は所属組織によって検証されます
  8. 多要素認証 (MFA):

    • ユーザー名とパスワードだけでなく、追加のセキュリティ層を追加します
    • SSO または従来の認証と併用可能
    • 通常、あなたが知っていること、持っていること、実際に活動していることに関するものです

SSO フローの説明:

実装に入る前に、SSO フローを理解しましょう。

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

前提条件:

  • Java 17 以降
  • メイブン
  • 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

注:

バンシカは私の名前ですか?自分のものを入れたり、好きなものを例にしたりできます...

ステップ 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. 新しいレルムを作成します:

    • 左上隅の「マスター」に移動します
    • 「レルムを追加」を選択します
    • それに food-ordering-realm という名前を付けます
    • 「作成」をクリックします
  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
  • Web オリジンの設定: 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
  • メイブン
  • ドッカー

以上がKeycloak と Spring Boot: シングル サインオンを実装するための究極のガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。