zoukankan      html  css  js  c++  java
  • 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'))
    

      

     

  • 相关阅读:
    extern C的作用详解
    UIWindow in iOS
    iOS会议和组织
    Fantageek翻译系列之《使用Autolayout显示变化高度的UITableViewCell》
    KVO的概述的使用
    Struts2 基于XML校验(易百教程)
    Maven项目中添加JDBC驱动
    org.dom4j.DocumentException: null Nested exception: null解决方法
    struts2中的数据类型自动转换
    struts2的拦截器
  • 原文地址:https://www.cnblogs.com/double-W/p/12508840.html
Copyright © 2011-2022 走看看