Files
wehub-resource-sync 1443d3fdf9
Ruff Format Check / Ruff Format & Lint (push) Failing after 7m39s
Deploy VitePress site to Pages / build (push) Failing after 9m11s
Deploy VitePress site to Pages / Deploy (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:32:26 +08:00

104 lines
3.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 第三方登录认证
Yuxi 支持以OIDC接入第三方登录认证,方便企业用户集成现有的身份认证系统。
> 此功能默认关闭,需要在配置文件中启用并提供相关参数。
## 配置步骤
### 1. 前提条件
在你的SSO系统中注册一个新的客户端应用,获取以下信息:
- 客户端IDClient ID
- 客户端密钥(Client Secret
- ISSUER URL
填入回调地址(Redirect URI):https://<your_yuxi_host>/api/auth/oidc/callback
### 2. 配置Yuxi
在Yuxi的.env文件中添加以下配置项:
```sh
# 是否启用 OIDC 认证 (true/false)
# OIDC_ENABLED=false
# 认证源名称(显示在登录按钮上的文字,建议简短且具有辨识度, 默认: OIDC登录)
# OIDC_PROVIDER_NAME="OIDC登录"
# OIDC Provider 的 Issuer URL (例如: https://auth.example.com)
# OIDC_ISSUER_URL=
# OIDC Client ID
# OIDC_CLIENT_ID=
# OIDC Client Secret
# OIDC_CLIENT_SECRET=
# OIDC 回调 URL (可选,默认自动构建为 /api/auth/oidc/callback, 不建议自定义)
# 填写完整的地址:https://<your_yuxi_host>/api/auth/oidc/callback
# 需要确保此 URL 在 OIDC Provider 中已注册
# OIDC_REDIRECT_URI=
# 授权端点 (可选,自动从 discovery 获取)
# OIDC_AUTHORIZATION_ENDPOINT=
# Token 端点 (可选,自动从 discovery 获取)
# OIDC_TOKEN_ENDPOINT=
# UserInfo 端点 (可选,自动从 discovery 获取)
# OIDC_USERINFO_ENDPOINT=
# 登出端点 (可选,自动从 discovery 获取)
# OIDC_END_SESSION_ENDPOINT=
# 请求的 scope (默认: openid profile email)
# OIDC_SCOPES=openid profile email
# 是否自动创建用户 (true/false,默认: true)
# OIDC_AUTO_CREATE_USER=true
# OIDC 用户的默认角色 (user/admin,默认: user)
# OIDC_DEFAULT_ROLE=user
# OIDC 用户的默认部门名称 (默认: OIDC用户)
# OIDC_DEFAULT_DEPARTMENT=OIDC用户
# 用户名映射字段 (默认: preferred_username)
# OIDC_USERNAME_CLAIM=preferred_username
# 邮箱映射字段 (默认: email)
# OIDC_EMAIL_CLAIM=email
# 姓名映射字段 (默认: name)
# OIDC_NAME_CLAIM=name
# 是否使用原始用户名(不带 oidc: 前缀),允许映射到 Yuxi 已有的本地账号 (true/false,默认: false)
# 开启后,OIDC 返回的 username 会直接作为业务登录标识 uid 登录,需要管理员提前创建好用户账号
# OIDC_USE_RAW_USERNAME=false
# 是否从OIDC userinfo 中获取部门信息并自动创建关联部门 (true/false,默认: false)
# OIDC_FETCH_DEPARTMENT_INFO=false
# 部门名称字段映射 (默认: department)
# OIDC_DEPARTMENT_CLAIM=department
# OIDC 登录时是否强制提示用户重新登录 (添加 prompt=login 参数,true/false,默认: true)
# OIDC_FORCE_PROMPT_LOGIN=true
```
### 3. 重启Yuxi服务使配置生效
```bash
docker restart api-dev web-dev
```
## 功能说明
### 使用原始用户名(OIDC_USE_RAW_USERNAME=true
当你需要将 Yuxi 系统中已有的本地账号与 OIDC SSO 绑定,可以开启此选项。
**绑定原理**(无需修改数据库):
系统会创建一个标记为删除的占位用户 `oidc:{sub}:{target_user_id}` 来记录 OIDC sub 与 Yuxi 用户的绑定关系,确保只有绑定过的 OIDC 身份才能登录对应的账号,**防止账号冒用**。其中 `target_user_id` 是数据库中的数值 `users.id`;用户登录标识仍使用字符串 `uid`
### 自动获取部门信息(OIDC_FETCH_DEPARTMENT_INFO=true
开启后,系统会从 OIDC userinfo 中读取部门名称和描述,自动在 Yuxi 中创建部门并将用户关联到该部门。
- 对从 OIDC 获取的部门名称会自动做 `strip()` 去空格,并截断到 50 字符
- 部门描述会自动截断到 255 字符
- 如果部门名称处理后为空,会回退到使用 `OIDC_DEFAULT_DEPARTMENT` 默认部门