やりたいこと/モチベーション
ソフトウェア開発をするために、認証・認可としてOIDC(Open ID Connect)の開発用IDP(ID Provider)環境を準備したい。 ※実際のサービスとして利用するわけではない。
設計
- コンテナとして、OSS(Open Source Software)の IDPサーバとして Keycloak を利用できるようにする。
- そのまま Keycloak だけをコンテナで動かした場合、Keycloak 設定した情報が起動毎に再設定する必要があるので、設定データが消えてしまうので、Docker compose を使い設定データはローカルホスト(Docker Engine を起動したローカル PC)のストレージに保存されるようにする。
- 開発モードで動かした Keycloak のコンテナでは コンテナ内の h2 データベース 内に設定情報が記録されるので、h2 データベース のデータ構成ファイルをストレージに落とす。(共有ボリューム)
環境
- Windows 11 Home (23H2 / 22631.4112)
- Power Shell 7.4.5
- Docker Desktop 4.34.2 (167172)
- Docker Compose v2.29.2-desktop.2
手順(Step by Steps)
Keycloak 25.0.6 (2024-09-20 現在の最新)を起動する
※ ~/ :任意のディレクリ/フォルダを指す
1. 作業用ディレクトリ/フォルダを作成し、作業用ディレクトリに移動する
※ 現在のディレクトリ/フォルダ: ~/
※ ここでは、idp というディレクトを作成して行う
mkdir idp & cd idp
2. Keycloak の設定情報( h2 データベースのデータ)の保存用のディレクトリ/フォルダを作成する
※ 現在のディレクトリ/フォルダ: ~/idp/
※ ここでは、 h2 というディレクトリを作成する。
mkdir h2
3. Docker compose の定義ファイル(compose.yaml)を作成する
※ 現在のディレクトリ/フォルダ: ~/idp
version: '3.8' services: keycloak: image: quay.io/keycloak/keycloak:25.0.6 container_name: kc environment: KEYCLOAK_ADMIN: admin KEYCLOAK_ADMIN_PASSWORD: admin ports: - 8080:8080 volumes: - ./h2:/opt/keycloak/data/h2 command: start-dev
4. Keycloak を起動する
➡ Power Shell で docker compose コマンドをたたく
docker compose up -d
コマンドラインの出力状態
> docker compose up -d
docker compose up -d
time="2024-09-21T10:57:45+09:00" level=warning msg="******\\compose.yaml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion"
[+] Running 5/5
✔ keycloak Pulled 21.6s
✔ 55360c0b72d6 Pull complete 2.1s
✔ 893ee1952371 Pull complete 12.4s
✔ dd8f4a884d62 Pull complete 17.5s
✔ 6c4423ca13a5 Pull complete 17.5s
[+] Running 2/2
✔ Network idp_default Created 0.1s
✔ Container kc Started 1.5s
REPOSITORY TAG IMAGE ID CREATED SIZE
keycloak/keycloak 25.0.4 8ddfbf940862 2 weeks ago 432MB
停止する方法
docker compose down
Keycloak を設定する
アクセス方法
1. ブラウザで http://localhost:8080/admin
にアクセスする

2. Username : admin
, Password : admin
でサインインする

Realm を作成する
Keycloak の「Realm(レルム)」とは、認証と認可のための独立した空間や境界を指します。Realm は Keycloak 内でユーザー、アプリケーション、ロール(役割)、クライアントをグループ化して管理する単位です。それぞれの Realm は他の Realm と分離されており、ユーザーや設定はレルム間で共有されません。
1. 左上の ドロップダウンメニュー「Keycloak」から「Create realm」ボタンをクリック

2. 「Realm name」に、realm_test
を入力して、「Create」ボタンをクリック

9. 新しい realm 「realm_test」が作成される

User を作成する
1. Realm 「realm_test」の状態で、左側のメニューから「Users」メニューアイテムをクリック

2. Users 画面が表示されるので、「Add user」ボタンをクリック

3. Create user 画面が表示されるので、必要事項を入力する。ここでは以下の項目を設定し、Create ボタンをクリックする
- Email verified : On
- Username : user_test ※本項目だけは後で変更ができない
- Email : hoge.fuga@example.com
- First name : hoge
- Last name : fuga

4. user_test が作成されたら、「Credentials」タブをクリック

5. 「Set password」ボタンをクリック

6. パスワードを以下のように設定して、「Save」ボタンをクリック
- Password / confirmation : pass1234
- Temporary : Off

7. 確認ダイアログが表示されるので、「Save password」ボタンをクリック

Client を作成する
Keycloak の「Client(クライアント)」とは、Keycloak が認証・認可を提供する対象のアプリケーションやサービスを指します。クライアントは Keycloak に登録され、Keycloakと連携してユーザー認証やアクセストークンの管理などを行います
1. Realm 「realm_test」の状態で、左側のメニューから「Clients」メニューアイテムをクリック

2. Clinets ウィンドが表示されるので、「Create client」ボタンをクリック

3. Create Client – General settings が表示されるので、Clinet ID に client_test を入力して「Next」ボタンをクリック

4. Create Client – Capability config が表示されるので、そのまま「Next」ボタンをクリック

5. Create Client – Login settings が表示されるので、以下の項目を設定して「Save」ボタンをクリック
- Valid redirect URIs : http://localhost:3000/*
- Web origins : http://localhost:3000

コメント