Golang 串接 LDAP 登入
===
###### tags: `go` `api` `ldap` `login`
Package
---
yarn add github.com/go-ldap/ldap/v3
Sample Code
---
```
func LdapCheck(dto *models.LoginDto) (bool, error) {
ldapServer := "xxx.xxx.com"
port := 636
ldapUrl := fmt.Sprintf("%s:%d", ldapServer, port)
l, err := ldap.DialTLS("tcp", ldapUrl, &tls.Config{InsecureSkipVerify: true}) // TLS on default port 636
if err != nil {
log.Println("can not link to AD server")
return false, err
}
defer l.Close()
ldapProxyUser := "domain\\admin_user"
ldapProxyPass := "admin_password"
bind := ldap.NewSimpleBindRequest(ldapProxyUser, ldapProxyPass, nil)
_, err = l.SimpleBind(bind)
if err != nil {
log.Println("can not link to AD server via admin account")
return false, err
}
targetUser := "domain\\" + dto.USER_NAME
targetPass := dto.PASSWORD
targetBind := ldap.NewSimpleBindRequest(targetUser, targetPass, nil)
_, err = l.SimpleBind(targetBind)
if err != nil {
log.Println("帳號或密碼錯誤")
return false, nil
}
log.Println("成功連線及驗證")
return true, nil
}
```