見出し画像

Keycloakを少しずつ

SSOにそろそろ手を付ける必要性を感じている今日この頃。あまり詳しくないので避けていたが、Keycloakの構築からやってみることにした。

まだ理解が全くできていないので、SSO、oAuthも学びつつ、NextCloud、プリザンター、baserCMS、導入済みのActiveDirectory、MediaCMS、mailcow、導入済みのグループウェア(GroupSession、desknet'sNEO)、Difyあたりをもう少し連携できてうれしいことにつなげられるといいな・・・と夢を見ています。(まだ何もわかっていない状態なので頓挫しないことを祈る)

とりあえず今回は dockerでKeycloakを起動してログインとRealm(レルム)という「テナント」を作成してユーザーを登録するところまでやってみます。

まずはAI

NotebookLMにまっさらの状態で「Docker、Keycloak」だけ入れるとWebから情報を集めてくれて、それをもとに、docker-copose.ymlの作成を聞いた。
教えてくれた情報に対してさらに 自己証明書を組み合わせた場合で回答してもらった内容でやってみた。

NotebookLM知識ゼロからでも積み上げていける感じがとても良かったです。

ディレクトリ構成

プロジェクトディレクトリ/
├── docker-compose.yml
├── certs/
   ├── server.crt
   └── server.key

docker-compose.yml

server_ipは適宜変更
環境変数の「KC_HOSTNAME」は最初localhostだったので変更した

services:
  postgres:
    image: postgres:16.4
    volumes:
      - ./data/postgresql:/var/lib/postgresql/data
    environment:
      POSTGRES_DB: keycloak
      POSTGRES_USER: keycloak
      POSTGRES_PASSWORD: password
    networks:
      - keycloak_network

  keycloak:
    image: quay.io/keycloak/keycloak:26.1.2
    # 本番モード(start)で起動
    command: start
    environment:
      # データベース設定
      KC_DB: postgres
      KC_DB_URL: jdbc:postgresql://postgres:5432/keycloak
      KC_DB_USERNAME: keycloak
      KC_DB_PASSWORD: password

      # 管理者設定 [2]
      KC_BOOTSTRAP_ADMIN_USERNAME: admin
      KC_BOOTSTRAP_ADMIN_PASSWORD: admin

      # --- HTTPS/TLS設定 ---
      # 証明書と鍵ファイルのパスを指定 (コンテナ内のパス) [3]
      KC_HTTPS_CERTIFICATE_FILE: /opt/keycloak/conf/certs/server.crt
      KC_HTTPS_CERTIFICATE_KEY_FILE: /opt/keycloak/conf/certs/server.key

      # ホスト名設定 (mkcertで作成したドメインに合わせる) [4]
      KC_HOSTNAME: server_ip #localhost

      # その他推奨設定
      KC_HEALTH_ENABLED: "true"
      KC_METRICS_ENABLED: "true"

    volumes:
      # ローカルの証明書フォルダをコンテナにマウント
      - ./certs:/opt/keycloak/conf/certs:ro
    ports:
      - "7443:8443" # HTTPS用のポート [1, 5]
    depends_on:
      - postgres
    networks:
      - keycloak_network

networks:
  keycloak_network:

ブラウザでアクセス

https://server_ip:公開ポート番号

Username: 環境変数(KC_BOOTSTRAP_ADMIN_USERNAME)
Password:環境変数(KC_BOOTSTRAP_ADMIN_PASSWORD)

管理者アカウントの警告がでているがとりあえずログインできた

notebookLMすご!

レルムの作成

左上のKeycloakから「Create realm」をクリックする

とりあえず「Realm name」のみ適宜入力して「Create」をクリックする

Resource file はJSONで作成した定義を読み込めるようです

Realm「NextCloud」にユーザーを追加する
(左メニューの「Users」>「Create new user」をクリックする

Username は必須、それ以外もとりあえず入力して「Create」をクリックする

Credentialsタブでとりあえず「Set password」をクリックする

Passwordを入力して「Save」する

TemporaryをOnにすると初回の変更が必要


登録したRealmのURL確認

左メニューの「Clients」をクリックすると右側にURLが表示されるので、「account」の「Home URL」に行ってみる

先ほど登録したアカウントとパスワードでサインインしてみる

ログインできた

notebookLMがくれたアドバイス等

連携については、あっているかは今後やってみてどうなるかで考えよう・・・
とりあえずnotebookLMの内容を以下にコピペする

レルム(Realm)について

Keycloakにおけるレルムとは、「テナント」に相当する管理単位です。

  • 独立性: 各レルムは、ユーザー、アプリケーション(クライアント)、権限設定などを完全に分離して保持します。

  • masterレルム: 最初から存在するレルムです。これはKeycloak自体の管理専用として使い、実際のアプリケーションやユーザーの登録には使用しないことが推奨されています。

  • 使い分けの例: 「社内システム用レルム」「顧客向けサイト用レルム」のように、用途やユーザー層ごとに新しいレルムを作成して管理します。

プリザンター・NextcloudとのSSO連携(段階的アプローチ)

ソースにはこれら特定のアプリの設定手順は含まれていませんが、Keycloakでアプリケーションを保護する一般的な手順(クライアント登録)に基づいて進めることができます。

どちらのアプリも、標準的なプロトコルである OpenID Connect (OIDC) または SAML を使用して連携します。

ステップ1:Keycloak側での「クライアント」作成

アプリケーションをKeycloakに認識させるために「クライアント」を登録します。

  1. 作成したレルムの [Clients] メニューから [Create client] を選択します。

  2. Client ID: アプリを識別する名前(例: nextcloud)を入力します。

  3. Client Protocol: 通常は OpenID Connect を選択します。

  4. Valid Redirect URIs: 認証後に戻る先のURLを指定します(例: https://nextcloud.example.com/*)。

ステップ2:アプリケーション側の設定

ここからはソース外の情報となるため、各製品の公式ドキュメント等で最新設定を確認してください。

  • Nextcloudの場合:

    • 「OpenID Connect」アプリ(または「User SAML authentication」アプリ)をNextcloudにインストールして設定します。

    • Keycloakの「Discovery Endpoint」(https://.../realms/(レルム名)/.well-known/openid-configuration)の情報をNextcloudに入力するのが最も簡単な方法です。

  • プリザンターの場合:

    • プリザンターはOIDCやSAMLによる外部認証をサポートしています。

    • Service.json などの設定ファイルに、KeycloakのクライアントID、シークレット、認証エンドポイントのURLを記述する形になります。

====
ちなみにプリザンターの認証について

このあたりもやってみたいなとは思うが、もう少し先かな・・・(ver.1.5.1.0から)


いいなと思ったら応援しよう!