* 对应的config ldap: host: hostname.yourdomain.com //ldap服务器地址 port: 3268 //ldap服务器端口 attribute: mail //用户名对应ldap object属性 base: DC=yourdomain,DC=com //搜寻范围 user: CN=ldap helper,OU=yourdomain.com,DC=yourdomain,DC=com //第一次绑定用户 password: p@sswd //第一次绑定密码 ssl: false //使用使用ssl */
(password string)
| 21 | */ |
| 22 | |
| 23 | func ValidLDAPLogin(password string) (result bool, err error) { |
| 24 | |
| 25 | lc, err := ldap.Dial("tcp", fmt.Sprintf("%s:%d", "192.168.3.104", 389)) |
| 26 | if err != nil { |
| 27 | beego.Error("Dial => ", err) |
| 28 | return |
| 29 | } |
| 30 | defer lc.Close() |
| 31 | |
| 32 | err = lc.Bind("cn=admin,dc=minho,dc=com", "123456") |
| 33 | if err != nil { |
| 34 | beego.Error("Bind => ", err) |
| 35 | return |
| 36 | } |
| 37 | |
| 38 | searchRequest := ldap.NewSearchRequest( |
| 39 | "DC=minho,DC=com", |
| 40 | ldap.ScopeWholeSubtree, ldap.NeverDerefAliases, 0, 0, false, |
| 41 | fmt.Sprintf("(&(objectClass=User)(%s=%s))", "mail", "longfei6671@163.com"), |
| 42 | []string{"dn"}, |
| 43 | nil, |
| 44 | ) |
| 45 | |
| 46 | searchResult, err := lc.Search(searchRequest) |
| 47 | if err != nil { |
| 48 | beego.Error("Search => ", err) |
| 49 | return |
| 50 | } |
| 51 | |
| 52 | if len(searchResult.Entries) != 1 { |
| 53 | err = errors.New("ldap.no_user_found_or_many_users_found") |
| 54 | return |
| 55 | } |
| 56 | |
| 57 | fmt.Printf("%+v = %d", searchResult.Entries, len(searchResult.Entries)) |
| 58 | |
| 59 | userDN := searchResult.Entries[0].DN |
| 60 | |
| 61 | err = lc.Bind(userDN, password) |
| 62 | if err == nil { |
| 63 | result = true |
| 64 | } else { |
| 65 | beego.Error("Bind2 => ", err) |
| 66 | err = nil |
| 67 | } |
| 68 | return |
| 69 | } |
| 70 | |
| 71 | func AddMember(account, password string) error { |
| 72 | lc, err := ldap.Dial("tcp", fmt.Sprintf("%s:%d", "192.168.3.104", 389)) |