需要提前安装python-ldap模块

python接入ldap其实分了几个步骤:

1、使用一个管理员账户登陆到ldap

2、使用一个字段值是唯一的字段,去搜索到要验证用户的DN值(ldap搜索到的单个用户信息是一个元祖数据,DN值就是元祖数据的第一位数据,"cn=x,ou=xx,ou=xxx,ou=xxxx,dc=xxxxx,dc=com"这个就是DN值)

3、然后使用搜索到的用户的DN值和用户的密码再去登陆一把ldap

Backend.py

import ldap

class LDAPBackend:
def authenticate(self, username=None, password=None, **kwargs):
AUTH_LDAP_SERVER_URI = "ldap://0.0.0.0:389"
AUTH_LDAP_BIND_DN = 'cn=管理员账号,dc=域名,dc=com'
AUTH_LDAP_BIND_PASSWORD = '管理员密码'
AUTH_LDAP_BASE_DN = 'dc=域名,dc=com'
if username and password:
# 初始化ldap连接
ldapconn = ldap.initialize(AUTH_LDAP_SERVER_URI)
# 设置连接协议为version3
ldapconn.protocol_version = ldap.VERSION3
# 使用管理员账号,密码登陆ldap
ldapconn.simple_bind_s(AUTH_LDAP_BIND_DN, AUTH_LDAP_BIND_PASSWORD)
# 根据我们需要的字段(此处的字段是值ldap查询到的数据的字段)搜索到指定的账户,sn是我用的,不同公司的可能不一样,需要根据自己的实际情况确定
ldap_result_id = ldapconn.search(AUTH_LDAP_BASE_DN, ldap.SCOPE_SUBTREE, "(sn={})".format(username), None)
# 获取到查询的结果数据
result_type, result_data = ldapconn.result(ldap_result_id,1)
# 如果查询到了用户就继续验证
if(not len(result_data) == 0):
try:
# 初始化ldap连接
ldapconn = ldap.initialize(AUTH_LDAP_SERVER_URI)
# 使用刚刚查到的登陆用的DN信息和密码再次登陆一下ldap
# 1、如果登陆成功会返回一个类似于右边的一个元祖数据(97, [], 1, [])
# 2、如果登陆失败就会抛出一个ldap.INVALID_CREDENTIALS的异常
ldapconn.simple_bind_s(result_data[0][0], password)
logger.debug("ldap auth success")
return self._get_or_create_user(result_data[0])
except ldap.INVALID_CREDENTIALS:
return None
return None
else:
return None def _get_or_create_user(self, user_info=()):
# 此处去应用的数据库查询用户的权限等信息,如果数据库没有这个用户,需要将用户信息持久化到数据库中去
#
#
#
#
return user

引用

user = LDAPBackend().authenticate(username=username, password=password)

遍历某个OU下的所有用户数据

AUTH_LDAP_SERVER_URI = "ldap://ip:port"  # 服务器地址
AUTH_LDAP_BIND_DN = 'cn=Manager,dc=xxx,dc=com'
AUTH_LDAP_BIND_PASSWORD = 'password'
AUTH_LDAP_BASE_DN_LIST = ['ou1', 'ou2'] def authenticate():
ldapconn = ldap.initialize(AUTH_LDAP_SERVER_URI)
ldapconn.protocol_version = ldap.VERSION3
ldapconn.bind_s(AUTH_LDAP_BIND_DN, AUTH_LDAP_BIND_PASSWORD) searchScope = ldap.SCOPE_SUBTREE
retrieveAttributes = None
searchFilter = "(&(objectClass=person))" # 这个参数的值是固定的person
for AUTH_LDAP_BASE_DN in AUTH_LDAP_BASE_DN_LIST:
ldap_result_id =ldapconn.search_s("ou={},ou=xx,dc=xxx,dc=com".format(AUTH_LDAP_BASE_DN), searchScope, searchFilter, retrieveAttributes)
for res in ldap_result_id:
print(res)

python实现ldap接入的更多相关文章

  1. 如何使用Python连接ldap

    如何使用Python连接ldap 好多使用ldap认证的软件都是Python的,比如superset和airflow, 好吧,他们都是airbnb家的.在配置ldap的时候可能会出现认证失败,你不知道 ...

  2. Python实现LDAP用户名密码验证

    网上借鉴了不少东西,下面是python代码,备份后用. 思路,因为每个用户的组都不一样,这样就导致了dn不一致的情况, 据需要先根据用户名获取该用户的dn,然后再bind用户名和密码进行验证. 反正是 ...

  3. Python使用LDAP做用户认证

    LDAP(Light Directory Access Portocol)是轻量目录访问协议,基于X.500标准,支持TCP/IP. LDAP目录以树状的层次结构来存储数据.每个目录记录都有标识名(D ...

  4. Python使用微信接入图灵机器人

    1.wxpy库介绍 wxpy 在 itchat 的基础上,通过大量接口优化提升了模块的易用性,并进行丰富的功能扩展. 文档地址:https://wxpy.readthedocs.io 从 PYPI 官 ...

  5. python 调用ldap同步密码

    windows + python2.7 安装 python-ldap https://www.lfd.uci.edu/~gohlke/pythonlibs/#python-ldap 2.python ...

  6. Python通过LDAP验证、查找用户(class,logging)

    定义一个类,用于初始化ldap连接,验证.查找用户等功能 # -*- coding: UTF-8 -*- import sys reload(sys) sys.setdefaultencoding(' ...

  7. python Django框架接入微信公众平台

    1.在接入微信公众平台之前,需要在微信公众平台配置好基本信息,如下: 这个时候点击“提交”按钮,会提示“Token校验失败”,不要着急,这是必然会出现的现象,先不要退出页面,保留各项输入的数据,按第二 ...

  8. ubuntu上安装python的ldap模块

    首先安装 apt-get install libldap2-dev 然后再安装 apt-get install libsasl2-dev 然后就可以继续安装你的python-ldap模块了 pip i ...

  9. 使用python的Flask实现一个RESTful API服务器端[翻译]

    最近这些年,REST已经成为web services和APIs的标准架构,很多APP的架构基本上是使用RESTful的形式了. 本文将会使用python的Flask框架轻松实现一个RESTful的服务 ...

随机推荐

  1. Android 中指纹识别

    Android从6.0系统开始就支持指纹认证功能了,指纹功能还需要有硬件支持才行 指纹与手机系统设置的指纹进行匹配 如图: 在LoginActivity 中弹出指纹验证Fragment,验证成功进入M ...

  2. SSH开发模式——Struts2进阶

    在之前我有写过关于struts2框架的博客,好像是写了三篇,但是之前写的内容仅仅是struts2的一些基础知识而已,struts2还有很多有趣的内容等待着我们去发掘.我准备再写几篇关于struts2的 ...

  3. Windows出现“引用账户被锁定,且暂时无法登录”解决方法

    1. 问题描述如下: i. 远程桌面登录时,出现提示必须修改密码才能登录,是因为密码过期所导致的,如下图: ii. 当我们登录Windows控制台(基于OpenStack平台的虚拟机)进行修改密码时, ...

  4. 关于VS2015 发布.net mvc 网站失败的问题

    问题:VS生成成功,发布失败,在“正在连接到***文件夹”处就不能继续了.. 项目开发告一段落,准备部署到服务器上进行最后测试,但是始终发布失败  生成成功,发布失败,没有任何提示信息 一开始以为是文 ...

  5. odoo10学习笔记十三:qweb报表

    转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/11189336.html 一:概述 报表是使用qweb定义的,报表的pdf导出是使用wkhtmltopdf来完 ...

  6. cocos2dx3.x + xcode7.3 问题“libpng error: CgBI: unhandled critical chunk”

    今天用 cocos2dx3.11.1 + xcode7.3.1 进行开发,新建项目后遇到如下问题: 在iphone(ios9.3.5)真机运行项目(用xcode自带虚拟机没有出现问题) auto sp ...

  7. promise 的基本用法

    //知识点1 例1--- 最基本的写法 Promise的基本语法哦 const Aa=new Promise(function(resolve,reject){ //resolve和reject是参数 ...

  8. JS高阶---原型链

    [大纲] [主体] 1.创建函数 注意:Object内置原生对象原来就有 2.添加实例方法 3.根据构造函数创建实例对象 原型链寻找 1.本身有在本身找 2.本身没有往摸着隐式原型链往里找 或者再上层 ...

  9. c# 第10节 表达式

    本节内容: 1:表达式是什么 2:表达式实例 1:表达式是什么 2:表达式实例 3:运算符分类

  10. 201871010131-张兴盼《面向对象程序设计(java)》第十四周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业要求在哪里 https://www.cnblogs.com/lily-2018/p/1 ...