中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Golang怎么連接Ldap

發布時間:2021-05-31 10:42:00 來源:億速云 閱讀:254 作者:小新 欄目:編程語言

這篇文章將為大家詳細講解有關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.  ldap.Dail             #這一步是底層的連接上

2. ldap.Bind             #類似于用戶名密碼認證

3.操作  比如  查詢,刪除,增加用戶

第一步: Dail

Dail有兩個參數 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. NewDelRequest,       然后調用ldap.Del

用戶密碼修改, ldap提供修改用戶密碼的結構體  -- ldap.NewPasswordModifyRequest , 然后調用ldap.PasswordModify

這個非常有特點,來看看:

查詢用戶組NewSearchRequest:

func NewSearchRequest(
    BaseDN string,
    Scope, DerefAliases, SizeLimit, TimeLimit int,
    TypesOnly bool,
    Filter string,
    Attributes []string,
    Controls []Control,
) *SearchRequest

BaseDN: 根據我的ldap環境應該是   ou=Group,dc=wjq,dc=com

scope:  我理解的是查詢的范圍,ldap是一個目錄樹,我一般設置 ldap.ScopeWholeSubtree

DerefAiases: 在搜索中別名(cn, ou)是否廢棄,設置:   ldap.NeverDerefAliases

SizeLimit: 大小設置,一般設置為0

TimeLimit: 時間設置,一般設置為0

TypesOnly:  設置false(好像返回的值要多一點)

Controls:  是控制我沒怎么用過,一般設置nil

這些我也沒理解透詳細可以參考: https://tools.ietf.org/html/rfc4511

查詢中主要的兩個參數 Filter, Attributes

Filter 是過濾條件

Attributes 返回的屬性值

建立SearchRequest結構體:

srsql := ldap.NewSearchRequest("ou=Group,dc=wjq,dc=com",
                       ldap.ScopeWholeSubtree, 
                       ldap.NeverDerefAliases,
                       0,
                       0, 
                      false,
                     "(&(objectClass=posixGroup))", 
                     []string{"dn", "cn", "uid"}, 
 nil)

Filter:  (&objectClass=posixGroup)) 查找所有group,返回每個組的dn, cn, uid

過濾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)

	}
}

以上就是Search的步驟。

在來看看添加用戶: NewAddRequest

添加

用戶:  wujq

password: 123456

家目錄: /home/wujq

所屬的組:  test  (id=1003)

1. 首先確認我需要添加的用戶dn:  uid=wujq,ou=People,dc=wjq,dc=com

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”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

东源县| 南汇区| 临沭县| 财经| 延川县| 清涧县| 连江县| 尼勒克县| 阳城县| 策勒县| 庆安县| 绿春县| 五大连池市| 灵川县| 镇坪县| 新宾| 芦溪县| 孝昌县| 丹巴县| 榆林市| 彭阳县| 正定县| 隆化县| 黎城县| 昌图县| 视频| 昌江| 峨眉山市| 崇信县| 安康市| 章丘市| 临高县| 威信县| 浦城县| 东辽县| 鲜城| 遵义市| 宿州市| 贵德县| 沁阳市| 富平县|