개요
보통 회사에서는 계정 관리, 인증 등에 LDAP을 사용하고 있는데, LDAP 서버에 저장된 정보 조회가 필요한 상황이다. Python으로 LDAP 서버에 요청할 수 있는 ldap3 라이브러리 사용방법을 간단히 적어둔다.
ldap3는 간단히 server, connection 객체를 정의하고, 연결에 대해 명령을 실행하는 방식으로 사용한다.
ldap3 라이브러리 설치
pip 등을 이용해 설치할 수 있다.
pip install ldap3
ldap3 import
ldap3에서 제공하는 클래스 등을 활용하기 위해 import 하여 사용한다. 보통 아래와 같이 사용하는 것 같다.
from ldap3 import Server, Connection, ALL
서버 접근
Ldap 서버에 접근할 때는 접근할 서버의 주소로 Server 객체를 생성 후, Connection 객체를 생성한다.
address = 'ip'
address = 'url'
address = 'ldap://ip'
address = 'ldaps://ip'
server = Server(address, get_info=ALL)
connection = Connection(server, auto_bind=True)
서버에서 정보를 가져와야 할 때는 Server 객체 생성 시 가져올 정보를 get_info 매개변수로 지정한다. 가져온 정보는 .info 속성으로 확인할 수 있다.
Connection을 생성하면서 바인딩 작업을 하고 싶다면 Connection 객체 생성 시 auto_bind 매개변수를 True로 지정한다.
참고로, ldaps를 사용하기 위해서는 인증서가 설치되어 있어야 한다.
서버 로그인
서버에 계정정보를 제공하여 연결하고 싶다면, Connection 객체를 생성할 때 사용자명과 비밀번호 같은 인증 정보를 전달한다.
server = Server(address, get_info=ALL)
connection = Connection(server, user=user_id, password=password, auto_bind=True)
정보 검색
ldap은 주로 저장된 데이터를 검색하는 경우가 많다. 데이터를 검색할 때는 Connection.search 함수를 사용한다.
search 함수를 사용할 때는 검색을 시작할 위치를 지정하는 search_base, 검색 기준인 search_filter 매개변수를 전달한다.
from ldap3 import Server, Connection, ALL, ALL_ATTRIBUTES
base = 'ou=kakao,dc=tistory,dc=net'
filter = "(cn={})".format(user_id)
attributes = ldap3.ALL_ATTRIBUTES
connection.search(base, filter, attributes=attributes)
print(connection.entries)
조회된 결과는 Connection.entries 속성으로 확인할 수 있다. 조회한 결과는 entry_attributes_as_dict 함수를 이용해 Dictionary로 변환할 수도 있다.
print([entry.entry_attributes_as_dict for entry in connection.entries])
참고 문서
https://ldap3.readthedocs.io/en/latest/tutorial_intro.html
https://ldap3.readthedocs.io/en/latest/tutorial_searches.html