Python 使用LDAP验证
安装
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'))