やりたいこと
Red Hat build of Keycloak(Keycloakの商用版)にてAdmin API経由でユーザを作成する。
環境情報
- Red Hat Enterprise Linux : 9.3 (Plow)
- rhbk-22.0.8
やり方
アクセストークンの取得を行い
$ AT=`curl --insecure -X POST http://localhost:8080/realms/master/protocol/openid-connect/token --user admin-cli:admin -H 'content-type: application/x-www-form-urlencoded' -d 'username=admin&password=xx&grant_type=password' | jq .access_token | sed -e 's/"//g'`
アクセストークンを引数に渡した上で「POST /admin/realms/{realm}/users」を利用すると
$ curl --location --request POST 'http://localhost:8080/admin/realms/master/users' --header 'Content-Type: application/json' --header "Authorization: Bearer $AT" --data-raw '{"enabled":"true", "username":"test-user01","credentials":[{"type":"password","value":"testpass123","temporary":false}]}'
標準出力はないまま、ユーザが作成される。
以下、補足です。
補足
公式ドキュメントの「UserRepresentation」欄を見ると分かりますが、項目に関してはオプショナルですがJSONの中に含めることでメールアドレスや名前も指定することが可能です。主な流れはKeycloakと同様となります。
kc.shが出力するデバッグ用のログを確認すると、作成したユーザ情報が表示されていました。
... DEBUG [org.hibernate.internal.util.EntityPrinter] (executor-thread-1) org.keycloak.models.jpa.entities.UserEntity{lastName=null, federatedIdentities=[], realmId=xx, credentials=[], createdTimestamp=xx, serviceAccountClientLink=null, enabled=true, notBefore=0, emailConstraint=xx, emailVerified=false, firstName=null, requiredActions=[], federationLink=null, attributes=[], id=xx, email=null, username=test-user01}
尚、ユーザ名は一意である必要があり、既に存在するusernameで追加を行うと以下のようなエラーメッセージが返ってきます。
{"errorMessage":"User exists with same username"}
以上です。