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,对用户进行认证(验证用户名以及密码)的更多相关文章

  1. 用SQL Server验证用户名和密码

    用SQL Server验证用户名和密码,从页面输入的用户名和密码与数据库的用户名和密码进行匹配,正确则登入,错误则提醒. <form action="index.jsp" m ...

  2. Android 设置代理(验证用户名和密码)

    这几天在研究在Android中,解析网页,但是公司内容,链接外网需要代理,并需要验证用户名和密码,十分头疼,网上查了下,没有头绪,最后总算在一个外国博客中看到类似的,记录下 URL url = new ...

  3. django 使用form验证用户名和密码

    form验证可以减少查询数据库,所以代码先预先验证,有问题可以返回给前端显示 1.在users文件夹下新建forms.py文件,用来验证用户名和密码是否为空,密码长度是否大于6 # -*- codin ...

  4. c# 调用mysql数据库验证用户名和密码

    使用mysql数据库验证用户名和密码时,如果用户名是中文,一直查不到数据 需要把app.config 中修改为 数据库统一设置utf8编码格式,连接数据库的时候设置编码Charset=utf8可以避免 ...

  5. Python使用LDAP做用户认证

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

  6. [C#]LDAP验证用户名和密码

    测试环境:VS2008, NET Framework 3.5 公司打算改用LDAP来存储用户名和密码,现在用C#测试下如何能拿到LDAP中的用户名,并检测用户密码是否正确.即输入用户名和密码,可以检验 ...

  7. LDAP验证用户名和密码

    测试环境:VS2008, NET Framework 3.5 公司打算改用LDAP来存储用户名和密码,现在用C#测试下如何能拿到LDAP中的用户名,并检测用户密码是否正确.即输入用户名和密码,可以检验 ...

  8. 编写Servlet,验证用户登录,如果用户名与密码都为“admin”则验证通过,跳转欢迎页面,否则弹出提示信息“用户名或密码错误,请重新输入!”,点击“确定”后跳转至登录页面

    java代码:(Test1) package com.test; import java.io.IOException; import java.io.PrintWriter; import java ...

  9. Kafka安装及开启SASL_PLAINTEXT认证(用户名和密码认证)

    前些日子要封装一个kafka的客户端驱动,配置了下kafka环境,发现配置复杂度完爆rabbitmq很多倍啊,而且发布订阅模式使用起来也很麻烦,可能就胜在分布式了吧. kafka需要java环境,自行 ...

  10. Java 验证用户名、密码

    1. 数据库操作 2.验证用户 2.1. 查询 String sql = String.format("select count(*) from user where name='%s' a ...

随机推荐

  1. NumPy学习4

    今天学习NumPy相关数组操作 NumPy 中包含了一些处理数组的常用方法,大致可分为以下几类:(1)数组变维操作(2)数组转置操作(3)修改数组维度操作(4)连接与分割数组操作 numpy_test ...

  2. 深入理解 Java AQS 原理与 ReentrantLock 实现

    目录 一.AQS 简介 二.AQS 核心设计 2.1 核心组成部分 2.2 AQS 的工作原理 2.3 AQS 的关键方法 三.ReentrantLock 与 AQS 的关系 3.1 Reentran ...

  3. 【网络协议】深入理解HTTP协议

    # 协议 协议就是一种双方提前约定好采用某种形式,以某种规格,利用某种物体把数据传输出去:而另一方再以同样的规则和流程去接收数据的约定制度或者规章. 现代网络是由多种运行在不同平台上的异构系统组成的. ...

  4. 【Linux】1.1 Linux课程介绍

    Linux课程介绍 1. 学习方向 linux运维工程师: 维护linux的服务器(一般大型企业) linux嵌入式工程师: linux做驱动开发,或者linux的嵌入式 linux下开发项目 2. ...

  5. 一文速通 Python 并行计算:05 Python 多线程编程-线程的定时运行

    一文速通 Python 并行计算:05 Python 多线程编程-线程的定时运行 摘要: 本文主要讲述了 Python 如何实现定时任务,主要有四种方式:通过 threading.Timer 类.通过 ...

  6. DevExpress汉化

    //ini 汉化文件的使用方法: var cxLocalizer1: TcxLocalizer; begin cxLocalizer1.FileName := '你的路径\DevChs.ini'; c ...

  7. 【杂谈】死锁?NO,时间跳跃!

    在日常开发或线上运维中,我们经常会遇到各种数据库异常,例如超时.死锁等.但有些问题,表面看似平常,背后却藏着意想不到的原因. 今天就分享一次由服务器时间跳跃引发的 MySQL 获取锁超时问题的排查过程 ...

  8. python之“if __name__=="__main__"”的代表的意思和用法

    创建下方脚本A def print_sum(a): print(a) print_sum(20) if __name__=="__main__": print("test ...

  9. python实例:导入会员数据后,读取数据文件,检查导入正确性(整列取excel值、合并列、response取值)

    场景描述:某系统新上线,老系统的会员数据要导入新系统中,包含手机号,上级信息和会员余额.有1万多条数据,手工对比过于繁琐,用python自动化处理 思路:系统导入数据后,脚本读取文件,先把会员数据取出 ...

  10. FastAPI数据库集成与事务管理

    title: FastAPI数据库集成与事务管理 date: 2025/04/18 00:15:34 updated: 2025/04/18 00:15:34 author: cmdragon exc ...