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 のコミットはかなり活発です.ですので、今後の発展はそれなりに期待できると思っています)
以上です.