安装
pip install ldap3
在windows平台安装时,如果报错无法安装python-ldap时,需要我们去下载源码包安装,网址如下:https://blog.csdn.net/zwolfer/article/details/102503536
-
注意: 在whl文件要选择对应的适合当前python版本及系统平台的文件,如:
python_ldap-3.2.0-cp36-cp36m-win_amd64,表示适用于3.6版本的python 以及 64位操作系统的windows平台 下载完成后,将下载完的文件拖入项目文件,运行: pip install python-ldap-xxx
最终实现代码
下列是一个简单的Demo
from ldap3 import Server, Connection, SUBTREE
class LDAP:
""" LDAP验证类 """
def __init__(self, ldap_host, ldap_port, ldap_admin_user, ldap_admin_password, ldap_base_search):
"""
初始化LDAP配置
:param ldap_host: ldap服务器地址
:param ldap_port: 默认389
:param ldap_admin_user: ldap管理员账户用户名
:param ldap_admin_password: ldap管理员账户密码
:param ldap_base_search: 用户查询域
"""
self.ldap_host = ldap_host
self.ldap_port = ldap_port
self.ldap_admin_user = ldap_admin_user
self.ldap_admin_password = ldap_admin_password
self.ldap_base_search = ldap_base_search
def validation(self, username, password):
"""
获取用户搜索入口
:return:
"""
s = Server(host=self.ldap_host, port=self.ldap_port, use_ssl=False, get_info='ALL')
# 连接ldap服务器
ldapz_admin_connection = Connection(s, user=self.ldap_admin_user, password=self.ldap_admin_password,
auto_bind='NONE',
version=3,
authentication='SIMPLE', client_strategy='SYNC', auto_referrals=True,
check_names=True,
read_only=False, lazy=False,
raise_exceptions=False)
# 连上以后必须bind才能有值
ldapz_admin_connection.bind()
# 这个是为了查询你输入的用户名的入口搜索地址,可以选入search_scope进行筛选
res = ldapz_admin_connection.search(search_base=self.ldap_base_search,
search_filter='(cn={})'.format(username),
search_scope=SUBTREE,
attributes=['cn', 'givenName', 'mail', 'sAMAccountName'],
)
try:
if res:
entry = ldapz_admin_connection.response[0]
dn = entry['dn']
attr_dict = entry['attributes']
try:
# 这个connect是通过你的用户名和密码还有上面搜到的入口搜索来查询的
conn2 = Connection(s, user=dn, password=password, check_names=True, lazy=False,
raise_exceptions=False)
conn2.bind()
if conn2.result["description"] == "success":
return True
else:
return False
except Exception as e:
return False
except KeyError as e:
return False
config = {
'ldap_host': '10.23.1.2', # ldap服务器地址
'ldap_port': 389, # 默认389
'ldap_admin_user': 'Sct', # ldap管理员账户用户名
'ldap_admin_password': 'Oxsdfa', # ldap管理员账户密码
'ldap_base_search': 'dc=xxx,dc=com', # 查询域
}
ldap = LDAP(**config)
if __name__ == '__main__':
print(ldap.validation('w', '$a'))