开源:把企业微信通讯录自动同步到 OpenLDAP 的 Docker 工具

7 阅读2分钟

我最近做了一个小工具:wecom-ldap-sync,用于把企业微信通讯录自动同步到 OpenLDAP。

项目地址:

适合什么场景

很多团队内部使用企业微信管理员工和组织架构,但实际落地时,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: 企业 ID
  • WECOM_CORPSECRET: 自建应用 Secret
  • 将服务器公网 IP 加入应用的企业可信 IP

LDAP 侧主要配置:

  • LDAP_BASE_DN
  • LDAP_ADMIN_PASSWORD
  • LDAP_USER_OU
  • LDAP_DEFAULT_PASSWORD
  • SYNC_INTERVAL_MINUTES
  • SYNC_DELETE_ORPHANS

已知限制

企业微信的邮箱和手机号属于敏感字段,未验证企业通常拿不到完整数据。项目里提供了一个折中方案:可以用 EMAIL_SUFFIX=@your-domain.com 自动生成 uid@your-domain.com,如果企微返回真实邮箱,则真实邮箱优先。

另外,部分企业微信账号的 userid 可能是邮箱或手机号形式,这类值会原样作为 LDAP 的 uid 使用。

后续计划

目前 roadmap 里有几个方向:

  • 钉钉通讯录同步
  • 飞书通讯录同步
  • 多来源合并到同一个 LDAP 目录
  • 更多 LDAP 属性映射

我想优先收集真实场景反馈,尤其是:

  • 你们的 LDAP 客户端依赖哪些属性?
  • 是否需要 mobileemployeeNumberdepartmentNumbermemberOf 等字段?
  • 离职用户更希望删除、禁用,还是保留?
  • 钉钉和飞书哪个优先级更高?

如果你正在使用企业微信、OpenLDAP、SSO、VPN 或自托管内部系统,欢迎试用和提 issue。