Python操作LDAP,对用户进行认证(验证用户名以及密码)
Python操作LDAP,对用户进行认证
1、环境
Python版本: 3.7.1
操作系统:windows 7 x64
第三方包:python-ldap
2、LDAP
LDAP,它是基于X.500标准的轻量级目录访问协议,支持TCP/IP
目录是一个为查询,浏览和搜索而优化的数据库,它成树状结构组织数据,类似文件目录。
目录数据库和关系数据库不用,它有优异的读性能,但写性能差,并没有事务处理,回滚等复杂功能,不适于存储修改频繁的数据,所以目录天生是用来查询。
3、基本模型
(1)目录树概念
- 目录树:在一个目录服务系统中,整个目录信息集都可以表示一个目录信息树,树中的每个节点是一个条目。
- 条目:每个条目就是一条记录,每个条目有自己的唯一可区别的名称(DN)
- 对象类:与某个实体类型对应的以中速属性,对象类是可以继承的,这样父类的必须属性也会被继承下来。
- 属性:描述条目的某个方面信息,一个属性有一个属性类型和一个或多个属性值组成,属性有必须属性和非必须属性。
(2)DC、UID、CN、SN、DN、RDN
- dc:域名的部分,其格式是将完整的域名分成几部分,如域名为example.com变成dc=example,dc=com(一条记录的所属位置)
- uid: 用户id
- ou:组织单位,组织单位可以包含其他各种对象(包括其他组织单元)
- cn: 公共名称
- sn: 姓
- dn:一条记录的位置,唯一
- rdn: 相对辨别名,类似于文件系统中的相对路径,它是与目录树结构无关的部分
4、代码实现
# 验证用户名以及密码是否正确(单点登录)
import ldap
AUTH_LDAP_SERVER_URI = "ldap://0.0.0.0:389" # ldap主机
AUTH_LDAP_BIND_DN = "cn=,ou=,dc=,dc=" # 根据自己实际需求填写
AUTH_LDAP_BIND_PASSWORD = "" # 管理账户密码
SEARCH_BASE = "OU=,DC=,DC="
def ldapAuth(username, password):
try:
# 建立连接
ldapconn = ldap.initialize(AUTH_LDAP_SERVER_URI)
# 绑定管理账户,用于用户的认证
ldapconn.simple_bind_s(AUTH_LDAP_BIND_DN, AUTH_LDAP_BIND_PASSWORD)
searchScope = ldap.SCOPE_SUBTREE # 指定搜索范围
searchFilter = "(sAMAccountName=%s)" % username # 指定搜索字段
ldap_result = ldapconn.search_s(SEARCH_BASE, searchScope, searchFilter, None) # 返回该用户的所有信息,类型列表
if ldap_result:
user_dn = ldap_result[0][0] # 获取用户的cn,ou,dc
try:
ldapconn.simple_bind_s(user_dn, password) # 对用户的密码进行验证
print("验证成功")
return True
except ldap.LDAPError as e:
print(e)
return False
else:
return False
except ldap.LDAPError as e:
print(e)
return False
# r = ldapconn.simple_bind_s(ldap_result[0]["distinguishedName"][0].decode("utf-8"), password) # 验证用户的账号和密码
# print(r)
# if ldap_result:
# print(ldap_result)
# result_data = ldapconn.result(ldap_result, 1) # 获取需要认证用户的dn
# print(result_data)
# if len(result_data):
# _, r_b = result_data[0]
# r = ldapconn.simple_bind_s(r_b["distinguishedName"][0].decode("utf-8"), password) # 验证用户的账号和密码
# print(r)
# else:
# return False
if __name__ == '__main__':
print(ldapAuth(用户名,密码))
Python操作LDAP,对用户进行认证(验证用户名以及密码)的更多相关文章
- 用SQL Server验证用户名和密码
用SQL Server验证用户名和密码,从页面输入的用户名和密码与数据库的用户名和密码进行匹配,正确则登入,错误则提醒. <form action="index.jsp" m ...
- Android 设置代理(验证用户名和密码)
这几天在研究在Android中,解析网页,但是公司内容,链接外网需要代理,并需要验证用户名和密码,十分头疼,网上查了下,没有头绪,最后总算在一个外国博客中看到类似的,记录下 URL url = new ...
- django 使用form验证用户名和密码
form验证可以减少查询数据库,所以代码先预先验证,有问题可以返回给前端显示 1.在users文件夹下新建forms.py文件,用来验证用户名和密码是否为空,密码长度是否大于6 # -*- codin ...
- c# 调用mysql数据库验证用户名和密码
使用mysql数据库验证用户名和密码时,如果用户名是中文,一直查不到数据 需要把app.config 中修改为 数据库统一设置utf8编码格式,连接数据库的时候设置编码Charset=utf8可以避免 ...
- Python使用LDAP做用户认证
LDAP(Light Directory Access Portocol)是轻量目录访问协议,基于X.500标准,支持TCP/IP. LDAP目录以树状的层次结构来存储数据.每个目录记录都有标识名(D ...
- [C#]LDAP验证用户名和密码
测试环境:VS2008, NET Framework 3.5 公司打算改用LDAP来存储用户名和密码,现在用C#测试下如何能拿到LDAP中的用户名,并检测用户密码是否正确.即输入用户名和密码,可以检验 ...
- LDAP验证用户名和密码
测试环境:VS2008, NET Framework 3.5 公司打算改用LDAP来存储用户名和密码,现在用C#测试下如何能拿到LDAP中的用户名,并检测用户密码是否正确.即输入用户名和密码,可以检验 ...
- 编写Servlet,验证用户登录,如果用户名与密码都为“admin”则验证通过,跳转欢迎页面,否则弹出提示信息“用户名或密码错误,请重新输入!”,点击“确定”后跳转至登录页面
java代码:(Test1) package com.test; import java.io.IOException; import java.io.PrintWriter; import java ...
- Kafka安装及开启SASL_PLAINTEXT认证(用户名和密码认证)
前些日子要封装一个kafka的客户端驱动,配置了下kafka环境,发现配置复杂度完爆rabbitmq很多倍啊,而且发布订阅模式使用起来也很麻烦,可能就胜在分布式了吧. kafka需要java环境,自行 ...
- Java 验证用户名、密码
1. 数据库操作 2.验证用户 2.1. 查询 String sql = String.format("select count(*) from user where name='%s' a ...
随机推荐
- NumPy学习4
今天学习NumPy相关数组操作 NumPy 中包含了一些处理数组的常用方法,大致可分为以下几类:(1)数组变维操作(2)数组转置操作(3)修改数组维度操作(4)连接与分割数组操作 numpy_test ...
- 深入理解 Java AQS 原理与 ReentrantLock 实现
目录 一.AQS 简介 二.AQS 核心设计 2.1 核心组成部分 2.2 AQS 的工作原理 2.3 AQS 的关键方法 三.ReentrantLock 与 AQS 的关系 3.1 Reentran ...
- 【网络协议】深入理解HTTP协议
# 协议 协议就是一种双方提前约定好采用某种形式,以某种规格,利用某种物体把数据传输出去:而另一方再以同样的规则和流程去接收数据的约定制度或者规章. 现代网络是由多种运行在不同平台上的异构系统组成的. ...
- 【Linux】1.1 Linux课程介绍
Linux课程介绍 1. 学习方向 linux运维工程师: 维护linux的服务器(一般大型企业) linux嵌入式工程师: linux做驱动开发,或者linux的嵌入式 linux下开发项目 2. ...
- 一文速通 Python 并行计算:05 Python 多线程编程-线程的定时运行
一文速通 Python 并行计算:05 Python 多线程编程-线程的定时运行 摘要: 本文主要讲述了 Python 如何实现定时任务,主要有四种方式:通过 threading.Timer 类.通过 ...
- DevExpress汉化
//ini 汉化文件的使用方法: var cxLocalizer1: TcxLocalizer; begin cxLocalizer1.FileName := '你的路径\DevChs.ini'; c ...
- 【杂谈】死锁?NO,时间跳跃!
在日常开发或线上运维中,我们经常会遇到各种数据库异常,例如超时.死锁等.但有些问题,表面看似平常,背后却藏着意想不到的原因. 今天就分享一次由服务器时间跳跃引发的 MySQL 获取锁超时问题的排查过程 ...
- python之“if __name__=="__main__"”的代表的意思和用法
创建下方脚本A def print_sum(a): print(a) print_sum(20) if __name__=="__main__": print("test ...
- python实例:导入会员数据后,读取数据文件,检查导入正确性(整列取excel值、合并列、response取值)
场景描述:某系统新上线,老系统的会员数据要导入新系统中,包含手机号,上级信息和会员余额.有1万多条数据,手工对比过于繁琐,用python自动化处理 思路:系统导入数据后,脚本读取文件,先把会员数据取出 ...
- FastAPI数据库集成与事务管理
title: FastAPI数据库集成与事务管理 date: 2025/04/18 00:15:34 updated: 2025/04/18 00:15:34 author: cmdragon exc ...