跳到主要内容

Keycloak

注意

本教程为社区贡献内容,不受 Open WebUI 团队官方支持,仅作为如何针对特定使用场景自定义 Open WebUI 的演示。想要贡献内容?请查看贡献教程。

本指南介绍如何将 Open WebUI 与 Keycloak 集成以实现 OIDC 单点登录(SSO)。

1. 环境准备与端口更改

Open WebUI 服务器端口

  • 默认端口8080

Keycloak 端口冲突问题

Keycloak 默认也使用 8080 端口,导致冲突。请将 Keycloak 端口更改为 9090

bin/kc.sh start-dev --http-port=9090

2. 创建 Keycloak Realm

  1. 打开浏览器访问 http://localhost:9090,创建管理员账户。
  2. http://localhost:9090/admin 登录管理控制台。
  3. 从顶部的 realm 下拉菜单中,点击 Add realm
  4. 输入 openwebui 作为 Realm name,点击 Create

创建 realm

3. 创建 OpenID Connect 客户端

信息

确保已选中 openwebui realm。默认为 master

选择 realm

  1. 确保已选中刚创建的 openwebui realm。
  2. 在左侧菜单中,点击 ClientsCreate client
  3. Client ID 设置为 open-webui
  4. 保持 Client protocolopenid-connect
  5. Access Type 设置为 confidential,点击 Save

访问设置客户端

4. 启用客户端认证并获取凭据

默认情况下,Keycloak 26.x 将客户端认证设置为"None",需要手动配置。

  1. 进入 Clientsopen-webuiSettings
  2. 检查 Client Authenticator 下拉菜单。
  3. 将"None"更改为 Client ID and secret,点击 Save
  4. 点击 Advanced 选项卡。
  5. Client authentication 部分,点击 Reveal secret 并复制密钥。
  6. 将此密钥粘贴到 .env 文件中的 OAUTH_CLIENT_SECRET 变量。

5. 创建测试用户

  1. 在左侧菜单中,进入 UsersAdd user
  2. 填写 UsernameEmail 等信息,点击 Save
  3. 点击新创建的用户,进入 Credentials 选项卡。
  4. 输入新密码,取消勾选 Temporary,点击 Set Password
    • 示例:用户名 testuser,密码 Test1234!

6. 配置 Open WebUI .env 文件

.env 文件中添加或修改以下变量。

# 启用 OAuth2/OIDC 登录
ENABLE_OAUTH_SIGNUP=true

# Keycloak 客户端信息
OAUTH_CLIENT_ID=open-webui
OAUTH_CLIENT_SECRET=<YOUR_COPIED_SECRET>

# OIDC Discovery Document URL
OPENID_PROVIDER_URL=http://localhost:9090/realms/openwebui/.well-known/openid-configuration

# (可选)SSO 按钮标签
OAUTH_PROVIDER_NAME=Keycloak

# (可选)OAuth 回调 URL
OPENID_REDIRECT_URI=http://localhost:8080/oauth/oidc/callback

修改 .env 文件后,重启 Open WebUI 服务器。

7. HTTP 与 HTTPS

  • HTTP(开发/测试环境)
    • 协议:http://
    • 示例:http://localhost:9090
  • HTTPS(生产环境推荐)
    • 需要 Keycloak TLS 设置或带 SSL 终止的反向代理。
    bin/kc.sh start --https-port=9090 \
      --https-key-store=keystore.jks \
      --https-key-store-password=<password>

8. 测试集成

  1. 访问 http://localhost:8080,您应该会看到"Continue with Keycloak"按钮。
  2. 点击该按钮,应该会重定向到 Keycloak 登录页面。
  3. 使用 testuser / Test1234! 登录,应该成功重定向回 Open WebUI。

9. 配置 Keycloak 用户组映射

9.1. 概述

默认情况下,Keycloak 客户端不在 token 中包含用户组信息。按照以下步骤传递用户组信息。

9.2. 找到 Mapper 创建入口

  1. 进入 Keycloak 管理控制台:http://localhost:9090/admin

  2. 选择 openwebui realm。

  3. 导航到 Clients,选择 open-webui 客户端。

  4. 进入 Client scopes 选项卡。

  5. 选择将包含用户组信息的 scope(例如 profileopen-webui-dedicated)。

    scope 客户端

  6. 在所选 scope 的详情中,进入 Mappers 选项卡。

9.3. 创建 Mapper

点击 CreateAdd builtin 开始创建新 mapper。

9.4. Mapper 设置

使用适当的设置配置 mapper,以包含用户组成员资格。

mapper 设置用户组客户端

9.5. 保存并应用

  • 保存 mapper 配置。
  • 重启 Open WebUI 服务器以应用更改。

9.6. 配置 Open WebUI 环境变量

.env 文件中添加或修改以下变量:

# 启用用户组同步
ENABLE_OAUTH_GROUP_MANAGEMENT=true

# (可选)启用即时用户组创建
ENABLE_OAUTH_GROUP_CREATION=true

# token 中用户组的 claim 键
OAUTH_GROUP_CLAIM=groups
本内容仅供参考,不构成任何保证、担保或合同承诺。Open WebUI 按“现状”提供。请参阅您的许可协议 以了解适用条款。