首先下载第三方库到beego的github.com里(具体连接方法可查看单元测试文件),https://github.com/mavricknz/ldap
具体Ldap与AD的参数如下图:
代码如下:
package controllers
import (
"fmt"
"github.com/astaxie/beego"
"github.com/mavricknz/ldap"
)
type MainController struct {
beego.Controller
}
// 默认方法
func (c *MainController) Get() {
// 连接LDAP
l, err := Connect_LDAP()
if err != nil {
fmt.Println("错误是", err)
c.Ctx.WriteString("连接LDAP失败")
return
}
// 查询LDAP
result, err := Search_LDAP(l)
if err != nil {
fmt.Println("错误是", err)
c.Ctx.WriteString("查询LDAP失败")
return
}
// 显示模板
c.Data["name"] = result
c.TplNames = "index.tpl"
}
/*
* 连接LDAP目录数据库
*/
func Connect_LDAP() (l *ldap.LDAPConnection, err error) {
// 连接参数
var ldap_server string = "localhost"
var ldap_port uint16 = 389
// 开始连接
fmt.Println("连接LDAP 开始...")
l = ldap.NewLDAPConnection(ldap_server, ldap_port)
error := l.Connect()
if error != nil {
return nil, error
}
fmt.Println("连接LDAP 结束...")
// 返回参数
return l, nil
}
/*
* 查询LDAP目录数据库
*/
func Search_LDAP(l *ldap.LDAPConnection) (res string, err error) {
// 查询参数
var base_dn string = "dc=micmiu,dc=com"
var filter = "(cn=*)"
// 查询配置
search_request := ldap.NewSearchRequest(
base_dn,
ldap.ScopeWholeSubtree, ldap.DerefAlways, 0, 0, false,
filter,
nil,
nil)
// 开始查询
sr, error := l.Search(search_request)
if error != nil {
return "", error
}
defer l.Close()
// 数据转换成Map
m := make(map[string]string)
for _, v := range sr.Entries[0].Attributes {
m[v.Name] = v.Values[0]
}
// 返回参数
return m["mail"], nil
}
期间遇到的问题:ldap_bind: Invalid credentials (49)
在代码绑定的时候遇到 49 错误:是因为绑定的账号没写全
比如这样写是错的:
var ldap_user = "cn=Manager"
这样写才是对的:
var ldap_user = "cn=Manager,dc=micmiu,dc=com"