シングル サインオン (SSO) は、最新の Web アプリケーションに不可欠な機能となり、ユーザー エクスペリエンスとセキュリティの両方を強化しています。この包括的なガイドでは、Keycloak と Spring Boot を使用して SSO を実装する手順を説明し、アプリケーションに堅牢な認証および認可ソリューションを提供します。
シングル サインオン (SSO) は、認証プロセスの合理化、セキュリティの強化、ユーザー エクスペリエンスの向上に不可欠です。主な利点の一部を次に示します:
集中認証: SSO により、ユーザーは 1 回の認証で複数のアプリケーションにアクセスできるようになります。 Keycloak は、ユーザー ID の一元管理を提供します。これは、多数のアプリケーションが存在する環境で役立ちます。
セキュリティの向上: 一元的な ID 管理により、セキュリティ ポリシー (パスワード強度、2 要素認証、アカウント ロックアウト ポリシーなど) を均一に適用できます。 OpenID Connect や OAuth 2.0 などのプロトコルに対する Keycloak のサポートにより、堅牢で最新のセキュリティ標準が保証されます。
パスワードの疲労の軽減とユーザー エクスペリエンスの向上: 一度ログインするだけで、ユーザーはパスワードの疲労や複数の認証情報を回避し、アプリケーション間でのやり取りがよりスムーズかつ高速になります。
スケーラビリティと柔軟性: Keycloak の構成は、多数のユーザーと、ソーシャル ログイン (Google、Facebook など) やエンタープライズ ディレクトリ (LDAP、Active Directory) を含む複数の ID プロバイダーをサポートできます。
カスタマイズと拡張性: Keycloak ではカスタムテーマ、ログインフロー、拡張機能を使用できるため、さまざまなニーズに適応できます。また、オープンソースでもあるため、組織は必要に応じてプラットフォームを変更または拡張できる柔軟性が得られます。
シングル サインオン (SSO) の代替手段:
複数のサインオン/従来の認証:
フェデレーション ID:
多要素認証 (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
注:
バンシカは私の名前ですか?自分のものを入れたり、好きなものを例にしたりできます...
次の依存関係を 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
を置き換えます。 Keycloak からコピーしたシークレットを使用します。通常はランダムなテキストです。
注:
運用環境または良い実践として、プロジェクトのルートにある .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 中国語 Web サイトの他の関連記事を参照してください。