python实现ldap接入
需要提前安装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接入的更多相关文章
- 如何使用Python连接ldap
如何使用Python连接ldap 好多使用ldap认证的软件都是Python的,比如superset和airflow, 好吧,他们都是airbnb家的.在配置ldap的时候可能会出现认证失败,你不知道 ...
- Python实现LDAP用户名密码验证
网上借鉴了不少东西,下面是python代码,备份后用. 思路,因为每个用户的组都不一样,这样就导致了dn不一致的情况, 据需要先根据用户名获取该用户的dn,然后再bind用户名和密码进行验证. 反正是 ...
- Python使用LDAP做用户认证
LDAP(Light Directory Access Portocol)是轻量目录访问协议,基于X.500标准,支持TCP/IP. LDAP目录以树状的层次结构来存储数据.每个目录记录都有标识名(D ...
- Python使用微信接入图灵机器人
1.wxpy库介绍 wxpy 在 itchat 的基础上,通过大量接口优化提升了模块的易用性,并进行丰富的功能扩展. 文档地址:https://wxpy.readthedocs.io 从 PYPI 官 ...
- python 调用ldap同步密码
windows + python2.7 安装 python-ldap https://www.lfd.uci.edu/~gohlke/pythonlibs/#python-ldap 2.python ...
- Python通过LDAP验证、查找用户(class,logging)
定义一个类,用于初始化ldap连接,验证.查找用户等功能 # -*- coding: UTF-8 -*- import sys reload(sys) sys.setdefaultencoding(' ...
- python Django框架接入微信公众平台
1.在接入微信公众平台之前,需要在微信公众平台配置好基本信息,如下: 这个时候点击“提交”按钮,会提示“Token校验失败”,不要着急,这是必然会出现的现象,先不要退出页面,保留各项输入的数据,按第二 ...
- ubuntu上安装python的ldap模块
首先安装 apt-get install libldap2-dev 然后再安装 apt-get install libsasl2-dev 然后就可以继续安装你的python-ldap模块了 pip i ...
- 使用python的Flask实现一个RESTful API服务器端[翻译]
最近这些年,REST已经成为web services和APIs的标准架构,很多APP的架构基本上是使用RESTful的形式了. 本文将会使用python的Flask框架轻松实现一个RESTful的服务 ...
随机推荐
- jQuery 选择器有61种你都知道了多少
下面列举了61种jQuery 选择器 参考 选择器 语句 描述 * $("*") 选择所有元素 #id $("#lastname") id=“lastname” ...
- LR实现处理PUT方法的案例
- 解决使用elementUI框架el-upload跨域上传时session丢失问题
解决方法一: 1.使用elementUI框架el-upload跨域上传时,后端获取不到cookie,后端接口显示未登录,在添加了 with-credentials="true"后依 ...
- 获得用户的真实ip HTTP_X_FORWARDED_FOR
工作中经常会有有获得用户真实ip的情况,HTTP_X_FORWARDED_FOR总是忘记,所以我这里记录下来吧. 在PHP 中使用 [“REMOTE_ADDR”] 来取得客户端的 IP 地址,但如果客 ...
- visudo: /etc/sudoers is busy, try again later
启动visudo时,报错"visudo: /etc/sudoers is busy, try again later" 解决思路:杀掉visudo进程 ps -ef|grep vi ...
- kibana和中文分词器analysis-ik的安装使用
Centos7安装elasticSearch6 上面讲述了elasticSearch6的安装和使用教程. 下面讲一下elasticsearch6的管理工具Kibana. Kibana是一个开源的分析和 ...
- 简单的深度神经网络实现——使用PyTorch
使用的数据集是MNIST,预期可以达到98%左右的准确率. 该神经网络由一个输入层,一个全连接层结构的隐含层和一个输出层构建. 1.配置库和配置参数 import torch import torch ...
- 阿里云Web应用防火墙采用规则引擎、语义分析和深度学习引擎相结合的方式防护Web攻击
深度学习引擎最佳实践 {#concept_1113021 .concept} 阿里云Web应用防火墙采用多种Web攻击检测引擎组合的方式为您的网站提供全面防护.Web应用防火墙采用规则引擎.语义分析和 ...
- Sentinel 知识点
Sentinel 实现的功能: Sentinel 实现的功能 相当于 熔断.降级 Hystrix.Spring Cloud 官方推荐的 Resilience4j
- 手机日期控件mobiscroll
query Mobiscroll是一个用于触摸设备(Android phones, iPhone, iPad, Galaxy Tab)的日期和时间选择器jQuery插件.以及各种滑动插件可以让用户很方 ...