4.4. Keycloak インテグレーション
Keycloak で HawtIO コンソールを保護できます。HawtIO を Keycloak と統合するには、以下を行う必要があります。
- Keycloak サーバーを準備する
- HawtIO を任意のランタイム (Quarkus、Spring Boot、WildFly、Karaf、Jetty、Tomcat など) にデプロイし、認証に Keycloak を使用するように設定する
4.4.1. Keycloak サーバーを準備する リンクのコピーリンクがクリップボードにコピーされました!
Keycloak サーバーをインストールして実行します。最も簡単な方法は、Docker イメージ を使用することです。
docker run -d --name keycloak \ -p 18080:8080 \ -e KEYCLOAK_ADMIN=admin \ -e KEYCLOAK_ADMIN_PASSWORD=admin \ quay.io/keycloak/keycloak start-dev
docker run -d --name keycloak \
-p 18080:8080 \
-e KEYCLOAK_ADMIN=admin \
-e KEYCLOAK_ADMIN_PASSWORD=admin \
quay.io/keycloak/keycloak start-dev
ここでは、他のアプリケーションが使用する可能性のあるポートとの潜在的な競合を回避するために、Keycloak サーバーのポート番号 18080 を使用します。
ユーザー admin/ パスワード admin を使用して、Keycloak 管理コンソール http://localhost:18080/admin/ にログインできます。hawtio-demo-realm.json を Keycloak にインポートします。これを行うには、Create Realm ボタンをクリックし、hawtio-demo-realm.json をインポートします。hawtio-demo レルムを作成します。
hawtio-demo レルムには、hawtio-client アプリケーションがパブリッククライアントとしてインストールされており、admin や viewer などのいくつかのレルムロールが定義されています。これらのロールの名前は、HawtIO 管理コンソールと JMX にログインできるデフォルトの HawtIO ロールと同じです。
以下のように、ユーザーも 3 種類あります。
admin-
パスワード
adminとロールadminが割り当てられた、HawtIO にログインできるユーザー。 viewer-
パスワード
viewerとロールviewerが割り当てられた、HawtIO にログインできるユーザー。 jdoe-
パスワードが
passwordで、ロールが割り当てられていないユーザーは、HawtIO にログインできません。
現在、HawtIO RBAC 機能はこれらのランタイムにまだ実装されていないため、ロールの違いは Quarkus と Spring Boot 上の HawtIO アクセス権に影響はありません。
4.4.2. 設定 リンクのコピーリンクがクリップボードにコピーされました!
HawtIO の Keycloak 統合の設定は、ランタイム (サーバー側) での Keycloak との統合と、HawtIO コンソール (クライアント側) での Keycloak との統合の 2 つの部分で構成されます。
各パーツごとに以下の設定を行う必要があります。
- サーバー側
- Keycloak アダプターのランタイム固有の設定
- クライアント側の設定
-
HawtIO Keycloak 設定
keycloak-hawtio.json
4.4.2.1. Quarkus リンクのコピーリンクがクリップボードにコピーされました!
まず、HawtIO を Quarkus アプリケーションにアタッチするために 必要な設定 を適用します。
Quarkus アプリケーションを Keycloak と統合するために必要なのは、Quarkus OIDC 拡張機能です。以下の依存関係を pom.xml に追加します。
pom.xml
<dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-oidc</artifactId> </dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-oidc</artifactId>
</dependency>
4.4.2.1.1. サーバー側 リンクのコピーリンクがクリップボードにコピーされました!
次に、application.properties (サーバー側の OIDC 拡張を設定する) に次の行を追加します。
application.properties
quarkus.oidc.token-state-manager.split-tokens = true は重要です。そうしないと、大きなサイズのセッションの Cookie トークンの問題が発生し、Keycloak との統合に失敗する可能性があります。
4.4.2.1.2. クライアント側の設定 リンクのコピーリンクがクリップボードにコピーされました!
最後に、Quarkus アプリケーションプロジェクトの src/main/resources の下に keycloak-hawtio.json を作成します (これはクライアント側の HawtIO JS 設定として機能します)。
keycloak-hawtio.json
Code Exchange Code Challenge Method の Proof Key 詳細設定に応じて、pkceMethod を S256 に設定します。PKCE が有効になっていない場合は、このオプションを設定しないでください。
プロジェクトをビルドして実行すると、Keycloak と統合されます。
4.4.2.1.3. 例 リンクのコピーリンクがクリップボードにコピーされました!
実際の例については、quarkus-keycloak の例 を参照してください。
4.4.2.2. Spring Boot リンクのコピーリンクがクリップボードにコピーされました!
まず、Spring Boot アプリケーションに HawtIO をアタッチするために 必要な設定 を適用します。
Spring Boot アプリケーションを Keycloak と統合するには、pom.xml に次の依存関係を追加する必要があります (4.xy は、最新の HawtIO リリースバージョンに置き換えます)。
pom.xml
<dependency> <groupId>io.hawt</groupId> <artifactId>hawtio-springboot-keycloak</artifactId> <version>4.x.y</version> </dependency>
<dependency>
<groupId>io.hawt</groupId>
<artifactId>hawtio-springboot-keycloak</artifactId>
<version>4.x.y</version>
</dependency>
4.4.2.2.1. サーバー側 リンクのコピーリンクがクリップボードにコピーされました!
次に、application.properties (サーバー側の Keycloak アダプターを設定する) に次の行を追加します。
application.properties
4.4.2.2.2. クライアント側の設定 リンクのコピーリンクがクリップボードにコピーされました!
最後に、Spring Boot プロジェクトの src/main/resources の下に keycloak-hawtio.json を作成します (これはクライアント側の HawtIO JS 設定として機能します)。
keycloak-hawtio.json
プロジェクトをビルドして実行すると、Keycloak と統合されます。
4.4.2.2.3. 例 リンクのコピーリンクがクリップボードにコピーされました!
作業例は、springboot-keycloak の例 を参照してください。