首先下载第三方库到beego的github.com里(具体链接方法可查看单元测试文件),https://github.com/mavricknz/ldapgit
具体Ldap与AD的参数以下图:github
代码以下:数据库
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 错误:是由于绑定的帐号没写全测试
好比这样写是错的:ui
var ldap_user = "cn=Manager"
这样写才是对的:code
var ldap_user = "cn=Manager,dc=micmiu,dc=com"