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

はじめに
所属組織の中で Open WebUI を運用している/したい方も多いと思いますが、アカウント管理はしばしば問題となります。
この記事では、Open WebUI を OIDC(OpenID Connect)認証付きで構築する最小手順を解説します。 以下のリポジトリにまとめた内容をベースにしています。
本記事の主眼は 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 |
認証フローは以下の通りです。
- Open WebUI のログイン画面で「Continue with Keycloak」を選択
- ブラウザが Keycloak にリダイレクトされ、ユーザー認証を実施
- 認証成功後、Open WebUI の callback URL にリダイレクト
- 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 用の設定を行います。
-
準備
- ブラウザで
http://keycloak.localtest.me:8080にアクセス-
HTTPS Requiredエラーが出た場合は付録を参照してください
-
- 管理者権限でログイン (admin / admin)

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

- 左上ハンバーガーメニューから
-
OAuth Client 作成
- 左メニューから Clients → Create client
- 入力する項目は以下の通り:
- Client Type:
OpenID Connect - Client ID:
open-webui
- Client Authentication:
ON
- Root URL:
http://localhost:8888/ - Valid redirect URIs:
http://localhost:8888/oauth/oidc/callback
- Client Type:
- 最後まで進めて Save をクリック
- 作成後、Credentials タブから Client Secret をコピー
-
.envファイルを編集し、以下の行を追加:
OIDC_CLIENT_SECRET=<コピーしたClient Secret> -
ユーザー作成
- 左メニューから Users → Create new user
- 設定する項目は以下の通り:
- Username:
admin - Email:
admin@example.com - First Name:
Admin - Last Name:
User
- Username:
- Create
- Credentials タブ → Set password
- Password を設定し、Temporary は OFF
Open WebUI 側の OIDC 設定
.env にClient Secretを追加したので、コンテナを再起動して設定を反映します。
docker compose up -d --force-recreate open-webui
すべてのコンテナが起動できたことを確認できましたら準備完了です。
動作確認
設定完了後、以下の流れでログインできれば成功です。
-
ブラウザで Open WebUI にアクセス
- URL:
http://localhost:8888/
- URL:
-
「Continue with Keycloak」を選択

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

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

一般ユーザーを追加する方法
admin を作成したときと同様の手順でユーザーを追加できます。
- ユーザーを作成
- Username:
user01 - Email:
user01@example.com - First Name:
User - Last Name:
01
- Username:
- パスワードを設定
- シークレットウィンドウで
http://localhost:8888にアクセスし、user01でログイン -
user01でログインされていることを確認

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 のバックアップなどを検討してください。
それではまた
参考資料
付録: Keycloakアクセス時のトラブルシューティング
Keycloak ログイン時に HTTPS 必須エラーが出る場合の回避手順
Mac の場合、ブラウザで Keycloak にアクセスした際に We are sorry... HTTPS requiredと表示されて Keycloak にアクセスできない場合を確認しました。

-
コンテナに入る
docker compose exec keycloak /bin/bash -
以下のコマンドを実行し、master realmに管理者ユーザーでログイン
/opt/keycloak/bin/kcadm.sh config credentials \ --server http://localhost:8080 \ --realm master \ --user admin \ --password admin -
以下のコマンドを実行し、master realm の設定を変更
/opt/keycloak/bin/kcadm.sh update realms/master -s sslRequired=NONE
Realm のSSL設定を無効化する方法
- 左上ハンバーガーメニューから
Realm settingsを選択 - General タブを選択
-
SSL Required を
noneに変更
同様の操作をCLIで行ってもOK
Discussion