🦔

Open WebUIをOIDC認証付きで構築する(Keycloak + Ollama)

に公開
2025/12/15

ヘッダー画像

はじめに

所属組織の中で Open WebUI を運用している/したい方も多いと思いますが、アカウント管理はしばしば問題となります。

この記事では、Open WebUI を OIDC(OpenID Connect)認証付きで構築する最小手順を解説します。 以下のリポジトリにまとめた内容をベースにしています。

https://github.com/atsuyaide/OpenWebUI-Keycloak/tree/main

本記事の主眼は Open WebUI に OIDC 認証を成立させること です。 Docker / docker compose / Open WebUI / Ollama / Keycloak の基本的な概念や使い方については解説しません。

動作環境

以下の環境で動作確認を行っています。

  • Windows 11 + WSL2(Ubuntu 22.04)
  • macOS ※一部追加対応が必要

全体構成と認証フロー

まずは全体構成

この構成では、Open WebUI を OIDC Client、Keycloak を OIDC Provider として利用します。LLM Provider として Ollama を利用していますが、他の LLM Provider を利用しても問題ありません。

コンポーネント 役割
Open WebUI OIDC Client
Keycloak OIDC Provider
Ollama LLM Provider

認証フローは以下の通りです。

  1. Open WebUI のログイン画面で「Continue with Keycloak」を選択
  2. ブラウザが Keycloak にリダイレクトされ、ユーザー認証を実施
  3. 認証成功後、Open WebUI の callback URL にリダイレクト
  4. Open WebUI にログインが完了

構築手順

コンテナ群の起動

まずはリポジトリをクローンし、各コンテナが起動する状態を作ります。

git clone https://github.com/atsuyaide/OpenWebUI-Keycloak.git

リポジトリのルートディレクトリに移動し、.env.example をコピーして .env を作成します。その後、docker compose でコンテナ群を起動します。

cp .env.example .env
docker compose up -d

Ollama 側の設定

任意のLLMが動作すればよいので、ここではgemma:2bをインストールします。

docker compose exec ollama ollama pull gemma:2b

Keycloak 側の設定

Keycloak 側でOpen WebUI 用の設定を行います。

  1. 準備

    1. ブラウザで http://keycloak.localtest.me:8080 にアクセス
      • HTTPS Required エラーが出た場合は付録を参照してください
    2. 管理者権限でログイン (admin / admin)

    Keycloakログイン画面

  2. Realm 作成

    1. 左上ハンバーガーメニューから Manage realms > Create realm を選択
    2. Realm名に open-webui と入力
    3. Create をクリック
    4. ログイン時に HTTPS Required エラーが出ていた場合は追加で付録の手順を実施してください。

    realm作成画面

  3. OAuth Client 作成

    1. 左メニューから Clients → Create client
    2. 入力する項目は以下の通り:
      • Client Type: OpenID Connect
      • Client ID: open-webui
        client作成画面
      • Client Authentication: ON
        client作成画面2
      • Root URL: http://localhost:8888/
      • Valid redirect URIs: http://localhost:8888/oauth/oidc/callback
        client作成画面3
    3. 最後まで進めて Save をクリック
    4. 作成後、Credentials タブから Client Secret をコピー
    5. .env ファイルを編集し、以下の行を追加:
    OIDC_CLIENT_SECRET=<コピーしたClient Secret>
    
  4. ユーザー作成

    1. 左メニューから Users → Create new user
    2. 設定する項目は以下の通り:
      • Username: admin
      • Email: admin@example.com
      • First Name: Admin
      • Last Name: User
        ユーザー作成画面
    3. Create
    4. Credentials タブ → Set password
    5. Password を設定し、Temporary は OFF
      パスワード設定画面

Open WebUI 側の OIDC 設定

.env にClient Secretを追加したので、コンテナを再起動して設定を反映します。

docker compose up -d --force-recreate open-webui

すべてのコンテナが起動できたことを確認できましたら準備完了です。

動作確認

設定完了後、以下の流れでログインできれば成功です。

  1. ブラウザで Open WebUI にアクセス

    • URL: http://localhost:8888/
  2. 「Continue with Keycloak」を選択
    Open WebUIログイン画面

  3. Keycloak のログイン画面が表示される
    Keycloakログイン画面

  4. 作成したユーザーで認証後、Open WebUI に戻ってログイン完了
    Open WebUIメイン画面

一般ユーザーを追加する方法

admin を作成したときと同様の手順でユーザーを追加できます。

  1. ユーザーを作成
    • Username: user01
    • Email: user01@example.com
    • First Name: User
    • Last Name: 01
  2. パスワードを設定
  3. シークレットウィンドウで http://localhost:8888 にアクセスし、user01 でログイン
  4. user01 でログインされていることを確認

Open WebUI一般ユーザーログイン画面

URL 設計の考え方

OIDC 認証でハマりやすいと思ったポイントは URL の視点混在することだと思いました。

視点 正しい考え方
Redirect URI ブラウザから到達可能な URL
Issuer URL トークン内の iss と完全一致
コンテナ間通信 service 名を利用

OIDC のリダイレクトは ブラウザが直接アクセスする URL が基準になります。そのため、keycloak:8080 のようなコンテナ内部向けの名前解決を Redirect や issuer に使うと、iss と discovery URL が一致せず署名検証に失敗します。

このリポジトリでは *.localtest.me を利用し、ブラウザ・コンテナ双方から一貫して到達可能な URL を用いています。

まとめ

Open WebUI に OIDC 認証を付けるための最小構成を解説しました。あくまで最小構成のため、実運用にあたっては TLS 化や Keycloak のバックアップなどを検討してください。

それではまた

参考資料

https://github.com/open-webui/open-webui

https://docs.openwebui.com/features/auth/sso/


付録: Keycloakアクセス時のトラブルシューティング

Keycloak ログイン時に HTTPS 必須エラーが出る場合の回避手順

Mac の場合、ブラウザで Keycloak にアクセスした際に We are sorry... HTTPS requiredと表示されて Keycloak にアクセスできない場合を確認しました。

Keycloak HTTPS requiredエラー画面

  1. コンテナに入る

    docker compose exec keycloak /bin/bash
    
  2. 以下のコマンドを実行し、master realmに管理者ユーザーでログイン

    /opt/keycloak/bin/kcadm.sh config credentials \
      --server http://localhost:8080 \
      --realm master \
      --user admin \
      --password admin
    
  3. 以下のコマンドを実行し、master realm の設定を変更

    /opt/keycloak/bin/kcadm.sh update realms/master -s sslRequired=NONE
    

Realm のSSL設定を無効化する方法

  1. 左上ハンバーガーメニューから Realm settingsを選択
  2. General タブを選択
  3. SSL Required を none に変更
    Keycloak Realm設定画面

同様の操作をCLIで行ってもOK

GitHubで編集を提案

Discussion