Keycloak の Client Secret を特定の文字列にしたい
Table of Contents
Keycloak の Client を Webコンソールからいじっていて、 Client Secret を誤って Regenerate してしまったので、以前の文字列に戻したい。
Webコンソール での Client Secret は入力が非活性なフィールドで、 再生成(Regenerate)しかできないようになっており、戻すことができない。
結論
Keycloak の Admin CLI や REST API を利用することで、強制的に特定の文字列に変更することができた。
これによって、変更前の文字列が分かれば、復旧することも可能。
環境
- Keycloak 26.3.1
- Client type: OpenID Connect の Client を作成して、 Client authentication を On にすることで Client Secret が生成される

Client Secret は非活性なフィールドの文字列でWebコンソールから任意の文字列が設定できない
詳細
事前に利用するシェル変数を設定
- KC_URL=<Keycloak を公開しているURL http://localhost:8080/ など>
- USER=<
KC_BOOTSTRAP_ADMIN_USERNAMEなどで設定した 管理者ユーザ名> - PASSWORD=<
KC_BOOTSTRAP_ADMIN_PASSWORDなどで設定した 管理者パスワード> - REALM=<Client が作成されている realm>
- CLIENT_UUID=<Client を作成した際に生成される UUID>
- Client の操作を行う際のエンドポイントとして利用される
Admin CLI の場合
- Admin CLI のインストール
https://www.keycloak.org/getting-started/getting-started-zip に記載されている、 Keycloak を取得し、展開する。
展開したディレクトリ内のbinをパスに通しておくとベター。
export PATH=$(pwd)/keycloak-26.3.1/bin:$PATH
- 認証取得
kcadm.sh config credentials --server ${KC_URL} --realm master --user ${USER} --password ${PASSWORD}
- Client Secret 更新
kcadm.sh update clients/${CLIENT_UUID} -s "secret=<Client Secret に設定したい文字列>" -r ${REALM}
- Client Secret 確認
kcadm.sh get clients/${CLIENT_UUID}/client-secret -r ${REALM}
結果が以下の形式で出力される
{
"type" : "secret",
"value" : "<設定された Client Secret>"
}
REST API の場合
- TOKEN取得
TOKEN=$(curl -s \
-d "client_id=admin-cli" \
-d "username=$USER" \
-d "password=$PASSWORD" \
-d "grant_type=password" \
"$KC_URL/realms/master/protocol/openid-connect/token" | jq -r .access_token)
- Client Secret 更新
curl -X PUT \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"secret": "<Client Secret に設定したい文字列>"}' \
"$KC_URL/admin/realms/$REALM/clients/$CLIENT_UUID"
- Client Secret 確認
curl -s \
-H "Authorization: Bearer $TOKEN" \
"$KC_URL/admin/realms/$REALM/clients/$CLIENT_UUID/client-secret" | jq
結果が以下の形式で出力される
{
"type" : "secret",
"value" : "<設定された Client Secret>"
}
事後確認
Webコンソール から確認してみると、 Client Secret の文字数が変更されており、適切に更新されたことがわかる(もちろん表示することも可能)

更新後の Client Secret
所感・まとめ
- オペミスで Regenerate してしまった場合の救済措置くらいで利用可能
- Keycloak の他の設定値と異なり、 Client Secret は、 GET で取得したJSONの形式、と、 PUT/POST で送信するJSONの形式が異なるので、注意が必要
- 例えば、Admin CLIであれば、
kcadm.sh update clients/${CLIENT_UUID}/client-secret -r ${REALM} -s value=<Client Secret に設定したい文字列>はエラーになる
- 例えば、Admin CLIであれば、
参考
- Keycloak の Admin CLI
