👀

Keycloak の H2 データベースを覗いてみる

2023/05/10に公開

Keycloak の内部データベースの中身を覗きたいと思うことがあったので、公式の Docker イメージを使って試してみました。実施した手順をまとめます。

動作環境

Windows 版の Docker Desktop で Keycloak 公式の Docker イメージを動かしました。

  • Windows 11 Home version 22H2
  • Docker Desktop version 4.18.0
  • WSL version 1.2.5.0
  • Keycloak version 21.0.2

Keycloak の RDMBS にはデフォルトの H2 データベースを使いました。

手順

Docker 環境が既に整っていることを前提に、以降の手順を記載します。

コンテナを起動する

公式の Docker イメージを使ってコンテナを起動します。

PowerShell
docker run -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin -p 9080:8080 -p 9082:8082 quay.io/keycloak/keycloak start-dev

今回は検証が目的なので、 start-dev コマンドを指定して開発モードで Keycloak を起動します。

-p オプション (--publish オプション) を二つ指定していますが、それぞれホストから Keycloak の管理コンソールとH2コンソールに接続するための設定です。H2コンソールは8082番ポートで立ち上がるので、適当なホストのポート番号にマッピングします。コンテナ側のポート番号と同じでもよいですが、今回は以下の通りとしました。

サービス ホストのポート番号 コンテナのポート番号
Keyclaok管理コンソール 9080 8080
H2コンソール 9082 8082

ホストのブラウザから Keycloak の管理コンソールに接続してみます。

http://localhost:9080/admin

Keycloak 管理コンソールのログイン画面が表示されました。 docker run のコマンドで指定した管理者ユーザーのユーザー名とパスワード(今回はどちらも admin )でログインできれば成功です。

Keycloak 管理コンソールのログイン画面

H2コンソールを起動する

ホストのブラウザからデータベースを覗けるようにするため、稼働中のコンテナでH2コンソールを起動します。
今回使用した Docker イメージにおいては、 H2 の jar ファイルは /opt/keycloak/lib/lib/main に格納されていました。これを使ってH2コンソールを起動します。
Docker Desktop から対象のコンテナの Terminal を開いて、以下のコマンドを実行します。

docker exec <container> java -cp /opt/keycloak/lib/lib/main/com.h2database.h2-2.1.214.jar org.h2.tools.Console -webAllowOthers

このとき -webAllowOthers オプションを指定します。これによって、他のコンピューター(今回はコンテナから見たときのホストマシン)からの接続が可能となります。
起動に成功すると、コンテナの8082番ポートでH2コンソールが立ち上がります。先ほど docker run した際にコンテナの8082番ポートをホストの9092番ポートにマッピングしたので、ホストのブラウザから9082番ポートに接続します。

http://localhost:9082

H2コンソールの接続画面が表示されました。
H2コンソールの接続画面
H2コンソールの接続画面

H2コンソールからデータベースに接続する

H2コンソールからデータベースに接続します。今回は以下の値を使いました。

パラメータ
ドライバクラス org.h2.Driver
JDBC URL jdbc:h2:file:~/data/h2/keycloakdb;AUTO_SERVER=TRUE
ユーザ名 sa
パスワード password

Keycloakの内部データベースに接続できました。

まとめ

コンテナ環境で Keycloak デフォルトの H2 データベースの中身を覗く手順を説明しました。これで Keycloak の学習が捗る予感。

参考

https://t246osslab.wordpress.com/2018/03/06/keycloakの内部dbにアクセスするには/

https://www.mastertheboss.com/keycloak/how-to-access-keycloak-h2-database/

Discussion