AD用户登录验证,遍历OU(LDAP)
先安装python-ldap模块
1.验证AD用户登录是否成功
import sqlite3,ldap domainname='cmr\\'
username='zhangsan'
ldapuser = domainname + username
ldappass='password'
ldappath='ldap://192.168.200.20:389/'
baseDN='OU=ouname,DC=d1,DC=d2,DC=com' l=ldap.initialize(ldappath)
l.protocol_version = ldap.VERSION3
try:
l.simple_bind_s(ldapuser,ldappass)
#print l.simple_bind_s(ldapuser,ldappass)
except Exception,err: #ldap.LDAPError
print err.message['desc'] #DC无法连通,或凭据错误,报错也不同
2.验证用户queryusername是否存在
import ldap
domainname='dname\\'
username='authname'
queryusername ='queryusername'
ldapuser = domainname + username
ldappass='password'
ldappath='ldap://192.168.200.20:389/'
baseDN='OU=拍,DC=d1,DC=d2,DC=com' try:
l = ldap.initialize(ldappath)
l.protocol_version = ldap.VERSION3
#l.simple_bind(ldapuser,ldappass)
l.bind_s(ldapuser,ldappass)
searchScope = ldap.SCOPE_SUBTREE
searchFiltername = "sAMAccountName" #通过samaccountname查找用户
retrieveAttributes = None
searchFilter = '(' + searchFiltername + "=" + queryusername +')' #searchFilter = '(' + searchFiltername + "=" + username +'*)' 加星号表示模糊查找
ldap_result =l.search_s(baseDN, searchScope, searchFilter, retrieveAttributes) #返回结果为list或None
#searchFilter = '(&(objectClass=person)(sAMAccountName=username))'
#ldap_result =l.search(baseDN, searchScope, searchFilter, retrieveAttributes)
#ldap_result =l.search_ext_s(baseDN, searchScope, searchFilter, retrieveAttributes)
#print ldap_result
if len(ldap_result) == 0:
print queryusername + ' Doesnot Exist'
except ldap.LDAPError, e:
print e
finally:
l.unbind_s() #解除ldap binding
del l
3.遍历某个OU下所有用户
# -*- coding: UTF-8 -*- import ldap
domainname='umr\\'
username='authusername'
ldapuser = domainname + username
ldappass='password'
ldappath='ldap://192.168.200.20:389/'
baseDN='OU=ServerAdmin,DC=umr,DC=uu,DC=com' try:
l = ldap.initialize(ldappath)
l.protocol_version = ldap.VERSION3
#l.simple_bind(ldapuser,ldappass)
l.bind_s(ldapuser,ldappass)
searchScope = ldap.SCOPE_SUBTREE
retrieveAttributes = None
searchFilter = '(&(objectClass=person))' #遍历该OU下所有用户,包含子OU
ldap_result =l.search_s(baseDN, searchScope, searchFilter, retrieveAttributes) #返回结果为list或None for pinfor in ldap_result:
#pinfor是一个tuple,第一个元素是该用户的CN,第二个元素是一个dict,包含有用户的所有属性
if pinfor[1]:
p=pinfor[1]
sAMAccountName = p['sAMAccountName'][0] #返回值是一个list
displayName = p['displayName'][0]
#如果用户的某个属性为空,则dict中不会包含有相应的key
if 'department' in p:
department = p['department'][0]
else:
department = None
print sAMAccountName,displayName,department if len(ldap_result) == 0:
print queryusername + ' Doesnot Exist'
except ldap.LDAPError, e:
print e
finally:
l.unbind_s() #解除ldap binding
del l
参考:http://blog.sina.com.cn/s/blog_69ac00af01012e0g.html
http://www.vpsee.com/2012/11/use-python-ldap-to-create-read-delete-upgrade-ldap-entries/
https://www.python-ldap.org/doc/html/ldap.html#ldap.LDAPObject.search
AD用户登录验证,遍历OU(LDAP)的更多相关文章
- AD域登录验证
AD域登录验证 作者:Grey 原文地址:http://www.cnblogs.com/greyzeng/p/5799699.html 需求 系统在登录的时候,需要根据用户名和密码验证连接域服务器进行 ...
- 根据当前登录域账号 获取AD用户姓名和所在OU目录
#region 根据当前登录域账号 获取AD用户姓名和所在OU目录 /// <summary> /// 根据当前登录域账号 获取AD用户姓名和所在OU目录 返回域用户是否存在 /// &l ...
- android loginDemo +WebService用户登录验证
android loginDemo +WebService用户登录验证 本文是基于android4.0下的loginActivity Demo和android下的Webservice实现的.l ...
- Python程序练习1-模拟用户登录验证
1.功能简介 此程序模拟用户登录验证的过程,实现用户名输入.黑名单检测.用户有效性判别.密码输入及验证等.用户在3次以内输入正确密码登陆成功,连续输错3次密码登陆失败,且该用户名被记录在黑名单,黑名单 ...
- djangorestframework-jwt自带的认证视图进行用户登录验证源代码学习
Django REST framework JWT djangorestframework-jwt自带的认证视图进行用户登录验证源代码学习 SECRET_KEY = '1)q(f8jrz^edwtr2 ...
- cookie实现用户登录验证
cookie实现用户登录验证 1, INSTALLED_APPS中注册app03 2,在主程序中新建映射关系到app3的url中 from django.conf.urls import url,in ...
- python3 用户登录验证的小功能
用户登录验证,记录一下,还需要修改黑名单不合理 #!/usr/bin/env python3 ''' 需求:编写登录接口 1.输入用户名和密码 2.验证用户密码成功后输出欢迎消息 3.3次没有验证通过 ...
- 如何使用Django实现用户登录验证
最初开始搞用户登录验证的时候感觉没什么难的,不就是增删改查中的查询数据库么,但是还是遇到许多小问题,而且感觉在查询数据库的时候,要把前端的数据一条一条的进行比对,会导致我的代码很丑,而且方式很不智,所 ...
- 用javascript实现简单的用户登录验证
用javascript实现简单的用户登录验证 <!DOCTYPE html> <html lang="en"> <head> <meta ...
随机推荐
- Nodejs学习笔记(五)—Express安装入门与模版引擎ejs
前言 前面也学习了一些Node.js的基本入门知道,现在开始进入Web开发的部分: Node.js提供了http模块,这个模块中提供了一些底层接口,可以直接使用,但是直接开发网站那还是太累了,所以ht ...
- spring之mvc原理分析及简单模拟实现
在之前的一篇博客中已经简单的实现了spring的IOC和DI功能,本文将在之前的基础上实现mvc功能. 一 什么是MVC MVC简单的说就是一种软件实现的设计模式,将整个系统进行分层,M(model ...
- 在懒加载的Ionic工程中使用 ionic2-auto-complete 组件:Can't bind to 'dataProvider' since it isn't a known property of 'ion-auto-complete'
问题描述: 在基于懒加载的Ionic工程中,使用ionic2-auto-complete组件(GitHub地址:https://github.com/kadoshms/ionic2-autocompl ...
- c#基础学习(0709)之vs通过抽象方法实现多态
抽象类不能用来实例化对象 1.抽象类中可以有实例成员,也可以有抽象成员 2.抽象成员不能有任何实现 3.抽象类.抽象成员必须包含在抽象类中 4.抽象类不能用来实例化对象,既然抽象类不能被实例化,那么抽 ...
- win7怎么去除快捷方式的小箭头
方式一. 新建一个txt文档把以下内容复制进去 在重命名001.bat 打开就行了 但要重启之后才有效 @ECHO OFF :MENU ECHO. ECHO. =-=-=-=-=请选择您要运行的项目= ...
- JS原型与原型链终极讲解
function Person () { this.name = 'John'; } var person = new Person(); Person.prototype.say = functio ...
- Unity3d嵌入web网页
应用场景 程序中的界面风格 UI内容等相关内容需要很容易方便的跟新替换,不使用unity传统的热加载方式,也不想使用和H5等做混合APP的时候, 就用嵌入web来实现. 假如我想替换某个背景图,一般来 ...
- [PHP] Yaf框架的简单安装使用
PHP开发组鸟哥惠新宸开发的php扩展框架 安装 windows下载扩展:https://pecl.php.net/package/yaf/2.2.9/windows 根据自己的电脑系统和php的版本 ...
- 手把手教你写一个java的orm(四)
开始准备生成sql 在上一篇里,我们已经取到了我们在生成sql语句中所需要的信息,这一篇里我们开始根据class来生成我们需要的sql.在这之前我们先确认几件事情 sql里的参数我们使用占位符的形式. ...
- JDK安装与环境变量全过程-鹏鹏
首先先讲下JDK的含义以及用处: JDK是 Java 语言的软件开发工具包,主要用于移动设备.嵌入式设备上的java应用程序.JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Jav ...