我最近做了一个小工具:wecom-ldap-sync,用于把企业微信通讯录自动同步到 OpenLDAP。
项目地址:
- GitHub: github.com/caoool/sync…
- 项目主页: caoool.github.io/sync-ldap/
- Docker Hub: hub.docker.com/r/caoool/we…
适合什么场景
很多团队内部使用企业微信管理员工和组织架构,但实际落地时,VPN、SSO、内部系统、老系统、NAS 或一些自托管工具仍然需要 LDAP 目录。
如果没有同步工具,就很容易变成手工维护 LDAP 账号:入职加账号、离职删账号、部门变更再改 OU。这个过程重复、容易漏,也不太适合小团队长期维护。
wecom-ldap-sync 的目标很简单:用一个 Docker 服务定时读取企业微信通讯录,并在 OpenLDAP 中维护一份对应的用户和组织结构。
当前支持的能力
- 通过企业微信「自建应用」读取部门和成员
- 在 LDAP 中创建对应的 OU 组织结构
- 同步用户属性:姓名、职位、别名、部门、邮箱等
- 为新用户设置 SSHA 加密的默认密码
- 已有密码不会被覆盖
- 支持按周期自动同步,默认每 30 分钟
- 支持
DRY_RUN=true预览变更,不直接写入 LDAP - 可选删除企业微信中已不存在的 LDAP 用户
快速启动
cp .env.example .env
# 编辑 .env,填入 LDAP 与企业微信配置
docker compose up -d
服务启动后会立即同步一次,之后按配置周期循环。查看日志:
docker compose logs -f wecom-ldap-sync
企微配置要点
需要在企业微信后台创建一个「自建应用」,授予通讯录读取权限,然后配置:
WECOM_CORPID: 企业 IDWECOM_CORPSECRET: 自建应用 Secret- 将服务器公网 IP 加入应用的企业可信 IP
LDAP 侧主要配置:
LDAP_BASE_DNLDAP_ADMIN_PASSWORDLDAP_USER_OULDAP_DEFAULT_PASSWORDSYNC_INTERVAL_MINUTESSYNC_DELETE_ORPHANS
已知限制
企业微信的邮箱和手机号属于敏感字段,未验证企业通常拿不到完整数据。项目里提供了一个折中方案:可以用 EMAIL_SUFFIX=@your-domain.com 自动生成 uid@your-domain.com,如果企微返回真实邮箱,则真实邮箱优先。
另外,部分企业微信账号的 userid 可能是邮箱或手机号形式,这类值会原样作为 LDAP 的 uid 使用。
后续计划
目前 roadmap 里有几个方向:
- 钉钉通讯录同步
- 飞书通讯录同步
- 多来源合并到同一个 LDAP 目录
- 更多 LDAP 属性映射
我想优先收集真实场景反馈,尤其是:
- 你们的 LDAP 客户端依赖哪些属性?
- 是否需要
mobile、employeeNumber、departmentNumber、memberOf等字段? - 离职用户更希望删除、禁用,还是保留?
- 钉钉和飞书哪个优先级更高?
如果你正在使用企业微信、OpenLDAP、SSO、VPN 或自托管内部系统,欢迎试用和提 issue。