Keycloak と Spring Boot: シングル サインオンを実装するための究極のガイド
導入:
シングル サインオン (SSO) は、最新の Web アプリケーションに不可欠な機能となり、ユーザー エクスペリエンスとセキュリティの両方を強化しています。この包括的なガイドでは、Keycloak と Spring Boot を使用して SSO を実装する手順を説明し、アプリケーションに堅牢な認証および認可ソリューションを提供します。
KeycloakによるSSOの重要性
シングル サインオン (SSO) は、認証プロセスの合理化、セキュリティの強化、ユーザー エクスペリエンスの向上に不可欠です。主な利点の一部を次に示します:
集中認証: SSO により、ユーザーは 1 回の認証で複数のアプリケーションにアクセスできるようになります。 Keycloak は、ユーザー ID の一元管理を提供します。これは、多数のアプリケーションが存在する環境で役立ちます。
セキュリティの向上: 一元的な ID 管理により、セキュリティ ポリシー (パスワード強度、2 要素認証、アカウント ロックアウト ポリシーなど) を均一に適用できます。 OpenID Connect や OAuth 2.0 などのプロトコルに対する Keycloak のサポートにより、堅牢で最新のセキュリティ標準が保証されます。
パスワードの疲労の軽減とユーザー エクスペリエンスの向上: 一度ログインするだけで、ユーザーはパスワードの疲労や複数の認証情報を回避し、アプリケーション間でのやり取りがよりスムーズかつ高速になります。
スケーラビリティと柔軟性: Keycloak の構成は、多数のユーザーと、ソーシャル ログイン (Google、Facebook など) やエンタープライズ ディレクトリ (LDAP、Active Directory) を含む複数の ID プロバイダーをサポートできます。
カスタマイズと拡張性: Keycloak ではカスタムテーマ、ログインフロー、拡張機能を使用できるため、さまざまなニーズに適応できます。また、オープンソースでもあるため、組織は必要に応じてプラットフォームを変更または拡張できる柔軟性が得られます。
シングル サインオン (SSO) の代替手段:-
複数のサインオン/従来の認証:
- ユーザーはアプリケーションまたはサービスごとに個別の資格情報を持っています
- 各システムに個別にログインする必要があります
- 各アプリケーションは独自の認証を管理します
-
フェデレーション ID:
- SSO に似ていますが、異なる組織間での認証が可能です
- SAML や OpenID Connect などの標準を使用
- ユーザーの身元は所属組織によって検証されます
-
多要素認証 (MFA):
- ユーザー名とパスワードだけでなく、追加のセキュリティ層を追加します
- SSO または従来の認証と併用可能
- 通常、あなたが知っていること、持っていること、実際に活動していることに関するものです
SSO フローの説明:
実装に入る前に、SSO フローを理解しましょう。
前提条件:
- 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 を構成する
-
Keycloak 管理コンソールにアクセスします:
- http://localhost:8088 にアクセスします。
- ユーザー名とパスワードとして admin/admin でログインします
-
新しいレルムを作成します:
- 左上隅の「マスター」に移動します
- 「レルムを追加」を選択します
- それに food-ordering-realm という名前を付けます
- 「作成」をクリックします
-
新しいクライアントを作成します:
最初の画面:- 「クライアント 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
- Web オリジンの設定: 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
を置き換えます。 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 フォームに移動します。そこで、ユーザーは foodorder レルム
認証後、メニューページが表示されます
SSO の重要性により、ログアウトしても以下のように再度ログインする必要がなくなります
その後、もう一度リンクをクリックすると、以下のようにパスワードとユーザー名を再度入力するよう求められることはありません
結論
おめでとうございます?、そして今までフォローしていただきありがとうございます
この実装では、Keycloak と Spring Boot を使用した堅牢な SSO ソリューションを示します。セキュリティを維持しながらシームレスな認証エクスペリエンスを提供します。この構成により、特定のアプリケーションのニーズを満たす簡単なカスタマイズと拡張が可能になります。
この実装に関して問題が発生したり質問がある場合は、お気軽に以下にコメントを残してください。より高度な構成と機能については、Spring Security と Keycloak のドキュメントを必ず確認してください。
github のコードへのリンク
参照:
- スプリングブーツ
- キークローク
- Java 17
- メイブン
- ドッカー
以上がKeycloak と Spring Boot: シングル サインオンを実装するための究極のガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











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

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

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

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

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

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

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

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