我们工作在和其他组织配合时,我们可能不是作为服务器搭建的一方,而是属于客户端的一方,需要去获取服务器的组织结构,按照某些条件去获取服务器的数据,也可以是同步组织结构
虽然说 golang 的数据结构没有 c++ 那么丰富,不过对于这个 ldap 还是有相应的库来进行处理的
官方文档地址:https://pkg.go.dev/gopkg.in/ldap.v3
我们也可以下载 github 上面的这个库
go get github.com/go-ldap/ldap/v3
golang 对于 ldap 库最新的版本是 Version: v3.1.0
开始编码
我们来写一个 demo ,获取我们上次搭建的 ldap 服务器上的组织结构
这是我们简单搭建的 ldap 服务器,可以使用 LDAP Admin 可视化管理工具来查看具体的页面效果
我们把这个库下载下来后,我们的编码思路如下:
- 填写 ldap 服务器地址以及填写相应的管理员信息,与 ldap 服务器建立连接
- 编写查询请求,并开始向 ldap 服务器进行查询
- 将查询结构,按照 ldap v3 库提供的方式 打印出效果来
连接 服务器
我们可以使用 func DialURL(addr string, opts ...DialOpt) (*Conn, error)
函数来与 ldap 服务器建立连接
ml, err := ldap.DialURL("ldap://xxxx")
if err != nil {
log.Fatal(err)
}
defer ml.Close()
我们填入的地址中,可以不用输入端口号,库函数已经有给我们做好处理,我们可以来看看源码
DialURL
函数用于连接 ldap 服务器,连接成功会给我们返回一个新的连接
我们可以继续看一下这个函数调用 c, err := dc.dial(u)
golang 的库会根据我们填写的地址是 ldap 还是 ldaps 来判断是做加密传输还是不加密传输,与之对应的就是访问不加密的用 389 端口,加密的就使用 636 端口
添加管理员绑定信息
我们添加的 ldap 域信息为:dc=xiaomotong,dc=com
我的管理员是:cn=admin,dc=xiaomotong,dc=com