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
ここでは、他のアプリケーションが使用する可能性のあるポートとの潜在的な競合を回避するために、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>
4.4.2.1.1. サーバー側
次に、application.properties
(サーバー側の OIDC 拡張を設定する) に次の行を追加します。
application.properties
quarkus.oidc.auth-server-url = http://localhost:18080/realms/hawtio-demo quarkus.oidc.client-id = hawtio-client quarkus.oidc.credentials.secret = secret quarkus.oidc.application-type = web-app quarkus.oidc.token-state-manager.split-tokens = true quarkus.http.auth.permission.authenticated.paths = "/*" quarkus.http.auth.permission.authenticated.policy = authenticated
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
{ "realm": "hawtio-demo", "clientId": "hawtio-client", "url": "http://localhost:18080/", "jaas": false, "pkceMethod": "S256" }
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>
4.4.2.2.1. サーバー側
次に、application.properties
(サーバー側の Keycloak アダプターを設定する) に次の行を追加します。
application.properties
keycloak.realm = hawtio-demo keycloak.resource = hawtio-client keycloak.auth-server-url = http://localhost:18080/ keycloak.ssl-required = external keycloak.public-client = true keycloak.principal-attribute = preferred_username
4.4.2.2.2. クライアント側の設定
最後に、Spring Boot プロジェクトの src/main/resources
の下に keycloak-hawtio.json
を作成します (これはクライアント側の HawtIO JS 設定として機能します)。
keycloak-hawtio.json
{ "realm": "hawtio-demo", "clientId": "hawtio-client", "url": "http://localhost:18080/", "jaas": false }
プロジェクトをビルドして実行すると、Keycloak と統合されます。
4.4.2.2.3. 例
作業例は、springboot-keycloak の例 を参照してください。