mirror of
https://github.com/kuaifan/dootask.git
synced 2026-07-31 10:25:59 +00:00
3.2 KiB
3.2 KiB
id, title, type, feature, scope, locale, aliases, related_tools, related_pages, prerequisites, negative, last_verified
| id | title | type | feature | scope | locale | aliases | related_tools | related_pages | prerequisites | negative | last_verified | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ldap.sync.howto | 同步 LDAP 用户 | howto | ldap | admin | zh |
|
|
|
v1.7.90 |
同步 LDAP 用户
同步模式
DooTask 的 LDAP 同步是被动 + 按需两种:
- LDAP → DooTask(默认):用户在 DooTask 登录页输入域账号 + 密码 → 后端经 LDAP 认证成功 → 自动建/合并本地账号
- DooTask → LDAP(可选):开关
ldap_sync_local=open时,本地用户首次登录会反向把账号写到 LDAP
两种模式互不阻塞,可同时启用。
LDAP → DooTask(自动)
触发:用户在 DooTask 登录页输入域账号 + 密码。
流程(LdapUser::userLogin):
- 用管理员 Bind 在 Base DN 下搜索
loginAttr=用户输入用户名 - 找不到 → 登录失败
- 找到 → 用「entry 的 DN + 用户输入的密码」二次 Bind
- 二次 Bind 成功 → 从 entry 抽取邮箱(按
mail→cn→uid→userPrincipalName顺序) - 邮箱为空 → 抛
ApiException('LDAP 用户缺少邮箱属性,请联系管理员配置') - 邮箱存在 → 本地按 email 查 user:
- 不存在 →
User::reg(email, 随机密码)自动注册 - 存在但不是 LDAP 用户 → 在本地账号上打
ldapidentity,与 LDAP 合并
- 不存在 →
- 同步 LDAP entry 的
displayName到user.nickname - 同步 LDAP entry 的
jpegPhoto到uploads/user/ldap/{userid}.jpeg
DooTask → LDAP(反向)
触发:本地用户登录或注册时,且 ldap_sync_local=open。
流程(LdapUser::userSync):
- 跳过已是 LDAP 身份的用户
- 用本地 email 在 LDAP 找 entry,已存在则不重复写
- 不存在则在 LDAP 根据 Base DN 创建 entry,属性包含:
cn / sn / uid / mail = emailuserPassword = 用户当前密码(仅本次有效,下次改密码不会自动同步)displayName = nicknamejpegPhoto = 当前头像二进制(若存在)
- 本地账号加上
ldapidentity 表示已纳管
同步不到用户怎么办
- 核对 LDAP 设置(「应用」→ 管理员应用「LDAP」):地址、端口、Base DN、User DN 及密码,点「测试链接」验证
- 确认网络 / 防火墙放通 DooTask 到 LDAP 的端口
- LDAP 用户在登录时才同步创建,不是批量预同步;让用户用域账号登录一次即可出现
- 详细排查见 ldap.troubleshoot.faq
不支持
- 没有「同步所有 LDAP 用户到 DooTask」的批量按钮
- 没有「同步部门 / OU」功能
- 不同步成员关系、群组、角色
- 不会自动执行删除 / 更新:
userDelete / userUpdate需要主程序业务流程主动调用