開発用の認証・認可(idp)環境を準備する

Docker

やりたいこと/モチベーション

ソフトウェア開発をするために、認証・認可として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

参考情報

コメント

タイトルとURLをコピーしました