やりたいこと
Red Hat build of Keycloak(Keycloakの商用版)にてAdmin API経由でユーザ情報を一気に取得する。尚、デフォルトでは100ユーザを上限として出力される。
環境情報
- 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'`
アクセストークンを引数に渡した上で「GET /admin/realms/{realm}/users?max=XX」を利用すると(XXは表示したいユーザ数)100件以上のユーザ数が出力される。
$ curl -k -X GET http://localhost:8080/admin/realms/master/users?max=10000 -H "Authorization: Bearer "$AT
以下、補足です。
補足
テスト用にユーザ数を5000程度用意をした上でjqによる抽出処理まで実行しましたが、1秒未満で完了しました。
$ time curl -k -X GET http://localhost:8080/admin/realms/master/users?max=10000 -H "Authorization: Bearer "$AT | jq .[].username,.[].id | sed -e 's/"//g' > test.json % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 1399k 0 1399k 0 0 1911k 0 --:--:-- --:--:-- --:--:-- 1911k real 0m0.766s user 0m0.101s sys 0m0.020s
ちなみにmaxへ大きな値を入れることもできましたが(1,000,000,000は成功)、特定の値以上にすると以下のようなエラーになる模様です。
$ curl -k -X GET http://localhost:8080/admin/realms/master/users?max=10000000000 -H "Authorization: Bearer "$AT {"error":"RESTEASY003870: Unable to extract parameter from http request: jakarta.ws.rs.QueryParam(\"max\") value is '10000000000'"}
以上、ご参考になれば幸いです。