目前钉钉已经成为很多企业日常处理流程的必备工具,但是由于钉钉并没有开放鉴权接口,无法让钉钉作为本地系统的统一鉴权系统使用,每次有同事加入或者离开时,都需要人为的对本地系统进行维护,非常繁琐。那么有没有一种方法可以让钉钉作为本地的统一鉴权系统使用呢?

目前,在我们公司使用Openldap服务作为各个服务统一鉴权的入口,使用的应用系统包括:Gerrit/Jenkins/Yapi/Wiki/进度跟踪等,目前所有的系统都支持LDAP鉴权,所以如果能将钉钉的通讯录定期同步至LDAP中就可以实现统一鉴权的需求。但是由于钉钉的密码无法同步回本地,所以密码层面仍然是独立的。

本文章的实现思路参考了《基于钉钉 Virtual-LDAP KeyCloak 的内网统一认证系统》,感谢原作者的思路及贡献的virtual-ldap模块,本文所有的优化都是基于此文章基础上进行的优化。

实现思路

简单来说,我们希望能通过钉钉提供的LDAP作为统一鉴权方式,但是由于钉钉没有开放这个能力,那么我们需要将钉钉模拟一个LDAP服务。模拟出的LDAP环境,在内网环境中,我们对于LDAP信息的使用基本上围绕着用户名和密码,其他的信息以钉钉为准。所以,除了开放LDAP接口外,我们还需要提供用户界面,允许用户在内网修改密码。

整体的实现思路如下:

钉钉通讯录怎么建立?利用钉钉通讯录同步构建本地LDAP服务(1)

钉钉开发者平台

这里我创建的是H5微应用,配置时有几点需要注意:

钉钉通讯录怎么建立?利用钉钉通讯录同步构建本地LDAP服务(2)

VirtualLDAP

这是基于Node.js开发的一款组件,主要用于同步钉钉通讯录和模拟LDAP协议。基于原作者版本,为了满足自身应用场景,进行了如下修改:

KeyCloak

KeyCloak两部分需要进行配置:

正如之前所说,KeyCloak功能过于强大,这里用到的功能非常有限,如果有新的应用场景,欢迎留言。

钉钉通讯录怎么建立?利用钉钉通讯录同步构建本地LDAP服务(3)

搭建方式

这里提供了完整的编排文件,直接使用即可完成整套环境的快速建立。

git clone https://github.com/xiaoquqi/virtual-ldap cd virtual-ldap/docker-compose docker-compose up -d

配置文件登录相关信息待优化,