跳到主要内容

Keycloak

注意

本教程是社区贡献内容,不属于 OPL 数据空间官方支持范围。它主要用于演示如何按你的环境接入 Keycloak。

本指南介绍如何把 OPL 数据空间接入 Keycloak,实现基于 OIDC 的单点登录。

1. 环境准备与端口调整

OPL 数据空间默认端口

  • 默认端口:8080

Keycloak 端口冲突

Keycloak 默认也使用 8080,因此本地测试时通常要把它改到 9090

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

2. 创建 Keycloak Realm

  1. 在浏览器中打开 http://localhost:9090
  2. 创建管理员账号
  3. 登录管理控制台 http://localhost:9090/admin
  4. 点击顶部 realm 下拉 → Add realm
  5. Realm name 设为 openwebui,然后点击 Create

create-realm

3. 创建 OpenID Connect Client

信息

请确认你当前选中的是 openwebui realm,而不是默认的 master

select-realm

  1. 确保当前 realm 为 openwebui
  2. 在左侧菜单中进入 ClientsCreate client
  3. Client IDopen-webui
  4. Client protocol 保持 openid-connect
  5. Access Type 选择 confidential
  6. 点击 Save

access-setting-client

4. 启用客户端认证并获取密钥

Keycloak 26.x 默认把 Client Authentication 设为 “None”,需要手动改:

  1. 进入 Clientsopen-webui设置
  2. 找到 Client Authenticator
  3. None 改成 Client ID and secret
  4. 点击 Save
  5. 打开 Advanced 标签页
  6. Client authentication 区块中点击 Reveal secret
  7. 复制这个 secret,填入 OPL 数据空间的 OAUTH_CLIENT_SECRET

5. 创建测试用户

  1. 左侧菜单进入 UsersAdd user
  2. 填写 UsernameEmail 等信息并保存
  3. 打开该用户的 Credentials 标签
  4. 设置密码,取消 Temporary

例如:

  • Username:testuser
  • Password:Test1234!

6. 配置 OPL 数据空间的 .env

.env 中加入或修改以下变量:

ENABLE_OAUTH_SIGNUP=true

OAUTH_CLIENT_ID=open-webui
OAUTH_CLIENT_SECRET=<YOUR_COPIED_SECRET>

OPENID_PROVIDER_URL=http://localhost:9090/realms/openwebui/.well-known/openid-configuration

OAUTH_PROVIDER_NAME=Keycloak
OPENID_REDIRECT_URI=http://localhost:8080/oauth/oidc/callback

修改后需要重启 OPL 数据空间。

7. HTTP 与 HTTPS

  • 开发 / 测试环境:可直接用 http://
  • 生产环境:建议用 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
  2. 页面上应该会出现 “Continue with Keycloak” 按钮
  3. 点击后会跳转到 Keycloak 登录页
  4. 使用 testuser / Test1234! 登录
  5. 成功后会被重定向回 OPL 数据空间

9. 配置 Keycloak 的组映射

9.1 概览

默认情况下,Keycloak 不会自动把用户组信息放进 token。若你希望 OPL 数据空间同步组信息,需要手动添加 mapper。

9.2 定位 mapper 配置入口

  1. 打开 http://localhost:9090/admin
  2. 选择 openwebui realm
  3. 进入 Clients
  4. 选择 open-webui client
  5. 打开 Client scopes
  6. 选择要承载 group 信息的 scope,例如 profile 或专用 scope
  7. 进入该 scope 的 Mappers 标签页

scope-client

9.3 创建 mapper

点击 CreateAdd builtin,新增 group mapper。

9.4 设置 mapper

按需要配置 mapper,使 token 中包含 group membership。

mappers-setting-group-client

9.5 保存并生效

  • 保存 mapper 配置
  • 重启 OPL 数据空间

9.6 配置 OPL 数据空间环境变量

.env 中加入:

ENABLE_OAUTH_GROUP_MANAGEMENT=true
ENABLE_OAUTH_GROUP_CREATION=true
OAUTH_GROUP_CLAIM=groups

这样 OPL 数据空间就会从 token 的 groups claim 中读取组信息,并按需自动创建组。