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_Python操作LDAP,对用户进行认证(验证用户名以及密码)相关推荐

  1. 模拟用户登录过程,验证用户名、密码和校验码,如果全部正确提示用户登录成功,否则,提示用户相关输入错误

    要求:模拟用户登录过程,验证用户名.密码和校验码,如果全部正确提示用户登录成功,否则,提示用户相关输入错误. 目的:掌握登录校验的规则和原理. //登录验证 #include<stdio.h&g ...

  2. SpringSecurity用户认证设置用户名和密码的三种方式

    文章目录 SpringSecurity用户认证设置用户名和密码的三种方式 首先明白几个单词的意思: SpringSecurity默认的用户认证 1.通过配置文件进行用户认证 2.通过配置类进行用户认证 ...

  3. vue表单验证(用户名、密码、身份证号、中文姓名、手机号、邮箱)

    vue表单验证(用户名.密码.身份证号.中文姓名.手机号.邮箱) new Vue({el: '#register',data: function() {// 验证邮箱let checkEmail = ...

  4. Linux深入浅出--3.vi和vim的使用及关机重启命令及用户管理、添加查询切换用户、用户组的操作及Linux系统运行级别及找回root密码

    目录 一.vi和vim 1.vi和vim的基本介绍 2.vi和vim常用的三种模式 vim使用简单入门 3.三种模式转换结构图 4.vi和vim的快捷键使用 二.关机&重启命令 三.用户管理 ...

  5. 计算机用户凭据删除,win8系统如何删除保存的共享凭据(用户名和密码)

    当我们在win8系统中访问共享文件夹或者NAS网络共享盘的时候,Windows会提示输入访问共享所需要的用户名和密码,如果我们勾选了"记住我的凭据",Windows 就会将认证凭据 ...

  6. iis上ftp服务器用户设置,IIS设置FTP服务器,想请教一下怎样设置用户名和密码

    这样看看:用SPI重写WSPSend(),如果是80端口,那么就检查申请人的ip,如果此IP从来没有登记过,那么就要他输入ID和PASS,他输入正确的话,保存它的IP和用户名,密码以便下次查找. ch ...

  7. oracle impdp 按用户,Impdp按用户导入的具体操作.doc

    Impdp按用户导入的具体操作 Impdp按用户导入的具体操作 Impdp分析和模式Impdp分析 IMPDP命令行选项与EXPDP有很多相同的,不同的有:1.REMAP_DATAFILE该选项用于将 ...

  8. linux所请求的操作需要超级用户权限,详解Linux系统中的root权限控制

    在Linux操作系统中,root的权限是最高的,也被称为超级权限的拥有者.普通用户无法执行的操作,root用户都能完成,所以也被称之为超级管理用户. 在系统中,每个文件.目录和进程,都归属于某一个用户 ...

  9. 02【玩转Oracle】Oracle创建用户、赋予用户权限等基础操作

    开始之前,先了解一下一些单词,对今后看bug或者写代码有帮助. privilege权限:grant赋予xx权限:view视图:sequence序列:snapshots快照...(暂时想到这些,慢慢更新 ...

最新文章

  1. java8循环怎么给全局变量累加_JAVA使用for循环会重复调用list.size()吗?
  2. EF架构~为分组添加位运算聚合方法
  3. html中embed标签的用法
  4. 她偏爱雏菊一样的淡黄色_为什么开源项目(非常)偏爱新用户,以及您可以采取什么措施...
  5. 移动端iphone抓包调试神器—Stream安装和使用(一)
  6. brew安装php-ffmpeg,mac 系统编译安装ffmpeg
  7. 一名 IT 经理是如何把项目带崩的?
  8. 解决IIS安装的问题:要求输入用户名和密码
  9. 从弧长的计算到逆时针与顺时针旋转的定义 (二维空间)
  10. C语言图形库函数easyx下载
  11. 计算机系统的性能能被准确测量吗,信息技术 基于计算机的软件系统的性能测量与评级...
  12. 软考-信息系统项目管理师-信息系统与信息化
  13. ardruino控制继电器_arduino控制继电器
  14. 访问图片出现403的解决办法
  15. 什么是PO设计(封装)?
  16. 资深营销团队管理专家——文彬
  17. 我最欣赏的一句话:天道酬勤
  18. 利用kali hydra 暴力破解Windows7(hydra的基本用法)会继续更新
  19. PaddleClas蝴蝶分类
  20. Jenkin前端项目部署----远程服务

热门文章

  1. 【Socket网络编程】11.网络编程中的 数据封装 和 数据拆封
  2. 【自动驾驶】13. Apollo交通信号灯感知
  3. 传统MapReduce框架
  4. 一些重要的算法The Most Important Algorithms
  5. 中国计算机学会CCF推荐国际学术会议和期刊目录-计算机图形学与多媒体
  6. 12306的变态验证码算得了什么?我有Python神器!
  7. 【OpenCV3】级联分类器训练——traincascade快速使用详解
  8. PAT_A1106#Lowest Price in Supply Chain
  9. 软件构造第三章 第五部分
  10. HTML meta标签总结与属性使用介绍