第13章 Red Hat build of Keycloak 管理クライアント
Red Hat build of Keycloak 管理クライアントを使用して、Red Hat build of Keycloak 管理 REST API にアクセスします。
Red Hat build of Keycloak 管理クライアントは、Red Hat build of Keycloak 管理 REST API へのアクセスと使用を容易にする Java ライブラリーです。このライブラリーは実行時に Java 11 以上を必要とします (この要件は RESTEasy 依存関係により強制されます)。アプリケーションからこれを使用するには、keycloak-admin-client ライブラリーへの依存関係を追加します。たとえば、Maven を使用する場合は以下を実行します。
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-admin-client</artifactId>
<version>999.0.0-SNAPSHOT</version>
</dependency>
次の例は、Java クライアントライブラリーを使用してマスターレルムの詳細を取得する方法を示しています。
import org.keycloak.admin.client.Keycloak;
import org.keycloak.representations.idm.RealmRepresentation;
...
Keycloak keycloak = Keycloak.getInstance(
"http://localhost:8080",
"master",
"admin",
"password",
"admin-cli");
RealmRepresentation realm = keycloak.realm("master").toRepresentation();
管理クライアントの完全な Javadoc は、API ドキュメント で入手できます。
13.1. Red Hat build of Keycloak サーバーとの互換性 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak の管理クライアントは、Red Hat build of Keycloak サーバーの複数のバージョンで動作することを目的としています。管理クライアントは、クライアントより後にリリースされた Red Hat build of Keycloak サーバーの新しいバージョンと、以前にリリースされた Red Hat build of Keycloak サーバーの古いバージョンでサポートされる場合があります。この変更の結果、要求/応答本体の JSON プロパティーを表す基礎となる「表現」クラス (前のセクションで示した RealmRepresentation クラスなど) の Java フィールドは、クライアントとサーバーでまったく同じにならない可能性があります。
互換性の問題を回避するには、管理クライアントによって内部的に使用される com.fasterxml.jackson.databind.ObjectMapper クラスが、次の 2 つのプロパティーで初期化されていることを確認します。
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
上記のように管理クライアント作成の基本的な方法を使用している場合、管理クライアントはデフォルトで org.keycloak.admin.client.JacksonProvider クラスを使用して ObjectMapper を作成し、これらのプロパティーが自動的に追加されるため、これらのプロパティーはデフォルトで追加されます。ただし、Keycloak オブジェクトを作成するときに独自の customJacksonProvider を注入する場合は、互換性の問題を回避するために、オブジェクトマッパーが上記のプロパティーで初期化されていることを確認してください。
たとえば、管理クライアントが独自の MyCustomJacksonProvider クラスを使用して以下のようにインスタンス化される状況を考えてみましょう。
Keycloak.getInstance(
"http://localhost:8080",
"master",
"admin",
"admin",
"admin-cli",
null,
null,
new MyCustomJacksonProvider()
);
この場合、クラス MyCustomJacksonProvider がクラス org.keycloak.admin.client.JacksonProvider から拡張されていることを確認するか、上記の方法で ObjectMapper を手動で設定してください。KeycloakBuilder を使用して管理クライアントを作成し、RestEasy クライアントを手動で注入して作成する場合も、同様の注意が必要です。