下面由golang教學欄位來介紹Golang如何連接Ldap,希望對需要的朋友有幫助!
今天在這裡寫一些Golang怎麼連接ldap
golang的ldap套件有一些,我使用的是
go get -u "gopkg.in/ldap.v2"
我的ldap環境:
# rootdn: uid=admin,dc=wjq,dc=com password: openldap
dn: dc=wjq,dc=com dc: wjq objectClass: top objectClass: domain dn: ou=Group,dc=wjq,dc=com ou: Group objectClass: top objectClass: organizationalUnit dn: ou=People,dc=wjq,dc=com ou: People objectClass: top objectClass: organizationalUnit dn: uid=admin,dc=wjq,dc=com uid: admin objectClass: top objectClass: account
一個群組與一個使用者:
#组信息 dn: cn=test,ou=Group,dc=wjq,dc=com gidNumber: 1003 cn: test objectClass: posixGroup #用户信息 dn: uid=test,ou=People,dc=wjq,dc=com uidNumber: 1009 gidNumber: 1003 gecos: test homeDirectory: /home/test uid: test shadowMin: 0 shadowMax: 99999 shadowWarning: 7 loginShell: /bin/bash shadowInactive: -1 shadowExpire: -1 shadowFlag: -1 objectClass: posixAccount objectClass: shadowAccount objectClass: account cn: test userPassword:: e1NTSEF9d053TWhYRTR4STJUUmpJWm5MTkF4VFlBTFhJdStaZ0Q= shadowLastChange: 17858
golang處理步驟如下:
## 1. .Dail #這一步是底層的連線上 2. ldap.Bind ## 認證識別碼,與使用者識別碼第一步: DailDail有兩個參數network, address, 回傳(*Conn, error)# network: 是指網絡協議 tcp, udp
address: 是底層要連接的地址,需要帶端口號con, err := ldap.Dial("tcp", "127.0.0.1:389")
Bind(rootdn, password) (error)berror := conn.Bind("uid=admin,dc=wjq,dc=com", "openldap")
操作很有特點,我覺得也許是golang語言的特點,例如 查詢, ldap提供一個查詢的結構體-- ldap.NewSearchRequest, 只要我們把資料填入進去,然後呼叫ldap.Search
新增, ldap提供一個新增的結構體 -- ldap.NewAddRequest, 填入好數據, 然後呼叫ldap.Add 刪除, ldap提供刪除結構體 -- ldap. NewDel # 使用者密碼修改, ldap提供修改使用者密碼的結構體 -- ldap.NewPasswordModifyRequest , 然後呼叫ldap.PasswordModify 這個非常有特點,來看看: 查詢使用者群組NewSearchRequest:func NewSearchRequest( BaseDN string, Scope, DerefAliases, SizeLimit, TimeLimit int, TypesOnly bool, Filter string, Attributes []string, Controls []Control, ) *SearchRequest
srsql := ldap.NewSearchRequest("ou=Group,dc=wjq,dc=com", ldap.ScopeWholeSubtree, ldap.NeverDerefAliases, 0, 0, false, "(&(objectClass=posixGroup))", []string{"dn", "cn", "uid"}, nil)
過濾test使用者群組: (&(objectClass=posixGroup)(cn=test)) #過濾使用者cn= test,或uid=test(當然baseDn是使用者的): "(|(&(objectClass=posixAccount)(cn=test))(&(objectClass=posixAccount)(uid=test)))"
執行Search並且取得結果(在cur.Entries中):cur, er := l.Search(srsql) if er != nil { log.Fatalln(er) } if (len(cur.Entries) > 0){ for _, item := range cur.Entries { cn := item.GetAttributeValue("cn") if cn == "" { cn = item.GetAttributeValue("uid") } fmt.Println(cn) } }
在來看看新增使用者: NewAddRequest##新增 使用者: wujq
/wujq
所屬的群組: test (id=1003)
1. 首先確認我需要新增的使用者dn: uid=wujq,ou=People,dc=wj,, 10
2. gidNumber 是1003
3. 因為需要uidNumber值,假設我設定為1010(系統沒有使用)
執行程式碼如下:
sql := ldap.NewAddRequest("uid=wujq,ou=People,dc=wjq,dc=com") sql.Attribute("uidNumber", []string{"1010"}) sql.Attribute("gidNumber", []string{"1003"}) sql.Attribute("userPassword", []string{"123456"}) sql.Attribute("homeDirectory", []string{"/home/wujq"}) sql.Attribute("cn", []string{"wujq"}) sql.Attribute("uid", []string{"wujq"}) sql.Attribute("objectClass", []string{"shadowAccount", "posixAccount", "account"}) er := ldapcon.Add(sql)
以上是Golang如何連接Ldap的詳細內容。更多資訊請關注PHP中文網其他相關文章!