Skip to main content

Keycloak 集成

warning

本教程是社区贡献,不受 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 域

  1. 打开浏览器并转到 http://localhost:9090。创建管理员账户。
  2. http://localhost:9090/admin 登录管理控制台。
  3. 从顶部的域下拉菜单中,点击 添加域
  4. 输入 openwebui 作为 域名 并点击 创建

create-realm

3. 创建 OpenID Connect 客户端

info

确保您已选择 openwebui 域。默认是 master

select-realm

  1. 确保选择了您刚创建的 openwebui 域。
  2. 在左侧菜单中,点击 客户端创建客户端
  3. 客户端 ID 设置为 open-webui
  4. 保持 客户端协议openid-connect
  5. 访问类型 设置为 confidential 并点击 保存

access-setting-client

4. 启用客户端身份验证并获取凭据

默认情况下,Keycloak 26.x 将客户端身份验证设置为"无",因此需要手动配置。

  1. 转到 客户端open-webui设置
  2. 检查 客户端认证器 下拉菜单。
  3. 将"无"更改为 客户端 ID 和密钥 并点击 保存
  4. 点击 高级 选项卡。
  5. 客户端身份验证 部分,点击 显示密钥 并复制密钥。
  6. 将此密钥粘贴到您的 .env 文件中的 OAUTH_CLIENT_SECRET 变量中。

5. 创建测试用户

  1. 在左侧菜单中,转到 用户添加用户
  2. 填写 用户名电子邮件 等信息,然后点击 保存
  3. 点击新创建的用户,然后转到 凭据 选项卡。
  4. 输入新密码,取消选中 临时,然后点击 设置密码
    • 示例:用户名 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 发现文档 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 vs. 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。您应该看到"使用 Keycloak 继续"按钮。
  2. 点击该按钮。您应该被重定向到 Keycloak 登录页面。
  3. 使用 testuser / Test1234! 登录。您应该成功重定向回 Open WebUI。

9. 配置 Keycloak 组映射

9.1. 概述

默认情况下,Keycloak 客户端不在令牌中包含组信息。按照这些步骤传递组信息。

9.2. 定位映射器创建

  1. 转到 Keycloak 管理控制台:http://localhost:9090/admin

  2. 选择 openwebui 域。

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

  4. 转到 客户端范围 选项卡。

  5. 选择将包含组信息的范围(例如,profileopen-webui-dedicated)。

    scope-client

  6. 在所选范围的详细信息中,转到 映射器 选项卡。

9.3. 创建映射器

点击 创建添加内置 开始创建新映射器。

9.4. 映射器设置

使用适当的设置配置映射器以包含组成员身份。

mappers-setting-group-client

9.5. 保存并应用

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

9.6. 配置 Open WebUI 环境变量

在您的 .env 文件中添加或修改这些变量:

# 启用组同步
ENABLE_OAUTH_GROUP_MANAGEMENT=true
# (可选) 启用即时组创建
ENABLE_OAUTH_GROUP_CREATION=true
# 令牌中组的声明键
OAUTH_GROUPS_CLAIM=groups