Red Hat SSO(Keycloak) で Admin REST API SDK を使う

Red Hat SSO(Keycloak) には Admin REST API というものが用意されています.

こちらを用いることでユーザーを作成する等の Admin 処理を REST API で行えます.
今回はこの Admin REST API を Java 用 SDK で使ってみたいと思います.

pom.xml / build.gradle

こちらの SDK を用います.
Keycloak の場合は Maven Central のものを、Red Hat SSO の場合は Redhat GA のものを使いましょう.

pom.xml はこちら.

 

build.gradle はこちら.

compile group: 'org.keycloak', name: 'keycloak-admin-client', version: '3.4.3.Final-redhat-2'

 

ソースコード

いくつか例を示します.

まずはユーザー作成.

Keycloak client = Keycloak.getInstance(System.getenv().get(SERVER_URL),
        System.getenv().get(REALM),
        System.getenv().get(USERNAME),
        System.getenv().get(PASSWORD),
        System.getenv().get(CLIENT_ID),
        System.getenv().get(CLIENT_SECRET));
        
Response response = client.realm(realmName).users().create(user);

 

次にユーザー更新.

Keycloak client = Keycloak.getInstance(System.getenv().get(SERVER_URL),
        System.getenv().get(REALM),
        System.getenv().get(USERNAME),
        System.getenv().get(PASSWORD),
        System.getenv().get(CLIENT_ID),
        System.getenv().get(CLIENT_SECRET));
        
UserRepresentation user = client.realm(realmName).users().search(userName).get(0);
// ユーザー名を変更する
user.setUsername(newUserName);
// パスワードを変更する
CredentialRepresentation credential = new CredentialRepresentation();
credential.setType(CredentialRepresentation.PASSWORD);
credential.setValue(newPassword);
// 属性を変更する
user.getAttributes().put(ATTRIBUTE_IS_ACTIVE, Arrays.asList("true"));

client.realm(realmName).users().get(user.getId()).update(user);

 

最後にユーザー削除.

Keycloak client = Keycloak.getInstance(System.getenv().get(SERVER_URL),
        System.getenv().get(REALM),
        System.getenv().get(USERNAME),
        System.getenv().get(PASSWORD),
        System.getenv().get(CLIENT_ID),
        System.getenv().get(CLIENT_SECRET));
        
UserRepresentation user = client.realm(realmName).users().search(userName).get(0);
client.realm(realmName).users().delete(user.getId());

 

こんな感じに簡単に Admin REST API を使うことができます.
REST API なのでもちろん直接叩いてもいいのですがね.

 

感想

今回は Red Hat SSO の Admin REST API SDK を使ってみました.
SDK が REST API をラップしてくれているので簡単ですね.

ですが、Keycloak 全般に言えるのですが、ドキュメントがほとんどありません.
特に SDK についてのドキュメントは全く無いと言っても過言ではなく、ソースコードを読んで挙動を想像するしかありません(実際にかなりソースコードを読み込みました).

Keycloak 自体、発展途上な感じがあるので、そのうちドキュメントも整備されるでしょう.
それまでは頑張ってソースコード読みましょう.
(Keycloak のコミットはかなり活発です.ですので、今後の発展はそれなりに期待できると思っています)

 

以上です.