ホームページ Java &#&チュートリアル Keycloak と Spring Boot: シングル サインオンを実装するための究極のガイド

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

Nov 03, 2024 pm 11:10 PM

導入:

シングル サインオン (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 までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

会社のセキュリティソフトウェアはアプリケーションの実行に失敗していますか?それをトラブルシューティングと解決する方法は? 会社のセキュリティソフトウェアはアプリケーションの実行に失敗していますか?それをトラブルシューティングと解決する方法は? Apr 19, 2025 pm 04:51 PM

一部のアプリケーションが適切に機能しないようにする会社のセキュリティソフトウェアのトラブルシューティングとソリューション。多くの企業は、内部ネットワークセキュリティを確保するためにセキュリティソフトウェアを展開します。 ...

名前を数値に変換してソートを実装し、グループの一貫性を維持するにはどうすればよいですか? 名前を数値に変換してソートを実装し、グループの一貫性を維持するにはどうすればよいですか? Apr 19, 2025 pm 11:30 PM

多くのアプリケーションシナリオでソートを実装するために名前を数値に変換するソリューションでは、ユーザーはグループ、特に1つでソートする必要がある場合があります...

MapsTructを使用したシステムドッキングのフィールドマッピングの問題を簡素化する方法は? MapsTructを使用したシステムドッキングのフィールドマッピングの問題を簡素化する方法は? Apr 19, 2025 pm 06:21 PM

システムドッキングでのフィールドマッピング処理は、システムドッキングを実行する際に難しい問題に遭遇することがよくあります。システムのインターフェイスフィールドを効果的にマッピングする方法A ...

エンティティクラス変数名をエレガントに取得して、データベースクエリ条件を構築する方法は? エンティティクラス変数名をエレガントに取得して、データベースクエリ条件を構築する方法は? Apr 19, 2025 pm 11:42 PM

データベース操作にMyBatis-Plusまたはその他のORMフレームワークを使用する場合、エンティティクラスの属性名に基づいてクエリ条件を構築する必要があることがよくあります。あなたが毎回手動で...

Intellijのアイデアは、ログを出力せずにSpring Bootプロジェクトのポート番号をどのように識別しますか? Intellijのアイデアは、ログを出力せずにSpring Bootプロジェクトのポート番号をどのように識別しますか? Apr 19, 2025 pm 11:45 PM

intellijideaultimatiateバージョンを使用してスプリングを開始します...

Javaオブジェクトを配列に安全に変換する方法は? Javaオブジェクトを配列に安全に変換する方法は? Apr 19, 2025 pm 11:33 PM

Javaオブジェクトと配列の変換:リスクの詳細な議論と鋳造タイプ変換の正しい方法多くのJava初心者は、オブジェクトのアレイへの変換に遭遇します...

eコマースプラットフォームSKUおよびSPUデータベースデザイン:ユーザー定義の属性と原因のない製品の両方を考慮する方法は? eコマースプラットフォームSKUおよびSPUデータベースデザイン:ユーザー定義の属性と原因のない製品の両方を考慮する方法は? Apr 19, 2025 pm 11:27 PM

eコマースプラットフォーム上のSKUおよびSPUテーブルの設計の詳細な説明この記事では、eコマースプラットフォームでのSKUとSPUのデータベース設計の問題、特にユーザー定義の販売を扱う方法について説明します。

Redisキャッシュソリューションを使用して、製品ランキングリストの要件を効率的に実現する方法は? Redisキャッシュソリューションを使用して、製品ランキングリストの要件を効率的に実現する方法は? Apr 19, 2025 pm 11:36 PM

Redisキャッシュソリューションは、製品ランキングリストの要件をどのように実現しますか?開発プロセス中に、多くの場合、ランキングの要件に対処する必要があります。

See all articles