首先下載第三方庫到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"