>  기사  >  백엔드 개발  >  Golang에서 Ldap을 연결하는 방법

Golang에서 Ldap을 연결하는 방법

藏色散人
藏色散人앞으로
2021-05-31 10:10:183705검색

다음 튜토리얼 칼럼인 golang에서는 Golang을 Ldap에 연결하는 방법을 소개하겠습니다. 도움이 필요한 친구들에게 도움이 되길 바랍니다!

오늘 저는 Golang이 ldap에 연결하는 방법에 대해 여기에 글을 쓰고 있습니다.

golang에는 몇 가지 LDAP 패키지가 있습니다. 저는

go get -u "gopkg.in/ldap.v2"

내 LDAP 환경을 사용하고 있습니다:

rootdn: uid=admin,dc=wjq,dc=com 비밀번호: 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. 쿼리, 삭제, 사용자 추가

1단계: Dail

Dail에는 두 가지 매개변수가 있습니다. network, address, return (*Conn, error)

network: 네트워크 프로토콜을 나타냅니다. tcp, udp

address: 하위 레이어에 연결될 주소와 포트 번호를 포함해야 합니다

con, err := ldap.Dial("tcp", "127.0.0.1:389")

2단계: 인증

바인딩(rootdn, 비밀번호) (오류)

berror := conn.Bind("uid=admin,dc=wjq,dc=com", "openldap")

3단계: 작업 ;

작업은 매우 독특합니다.

쿼리와 같은 golang 언어의 기능일 수 있다고 생각합니다. ldap은 쿼리 구조인 ldap.NewSearchRequest를 제공합니다. 데이터를 입력한 다음 ldap.Search를 호출하면 됩니다.

Add, 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로 설정(아마도 더 많은 값을 반환하려면)

컨트롤: 많이 사용하지 않았습니다. 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)

필터: (&objectClass=posixGroup)) 모든 그룹을 찾아 각 그룹의 dn, cn, uid를 반환합니다.

테스트 사용자 그룹을 필터링합니다: (&( objectClass=posixGroup)(cn=test))

Filter user cn=test 또는 uid=test(물론) baseDn은 사용자의 것입니다.): "(|(&(objectClass=posixAccount)(cn=test))(&(objectClass =posixAccount)(uid=test)))"

실행 검색 및 결과 가져오기(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

Add

사용자: wujq

비밀번호: 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을 연결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제