Python实现LDAP用户名密码验证
网上借鉴了不少东西,下面是python代码,备份后用。
思路,因为每个用户的组都不一样,这样就导致了dn不一致的情况,
据需要先根据用户名获取该用户的dn,然后再bind用户名和密码进行验证。
反正是实现了,至于方式对不对后续再研究了。
#coding: utf-8
import ldap
'''
实现LDAP用户登录验证,首先获取用户的dn,然后再验证用户名和密码
''' ldappath = "ldap://xxxx"#ldap服务器地址
baseDN = "DC=aaaa,DC=bbbb,DC=com"#根目录
ldapuser = "xxxx";#ldap服务器用户名
ldappass = "xxxx";#ldap服务器密码 #获取用户的dn
def _validateLDAPUser(user):
try:
l = ldap.initialize(ldappath)
l.protocol_version = ldap.VERSION3
l.simple_bind(ldapuser,ldappass) searchScope = ldap.SCOPE_SUBTREE
searchFiltername = "sAMAccountName"
retrieveAttributes = None
searchFilter = '(' + searchFiltername + "=" + user +')' ldap_result_id = l.search(baseDN, searchScope, searchFilter, retrieveAttributes)
result_type, result_data = l.result(ldap_result_id,1)
if(not len(result_data) == 0):
r_a,r_b = result_data[0]
print r_b["distinguishedName"]
return 1, r_b["distinguishedName"][0]
else:
return 0, ''
except ldap.LDAPError, e:
print e
return 0, ''
finally:
l.unbind()
del l #连接超时,尝试多次连接
def GetDn(user, trynum = 30):
i = 0
isfound = 0
foundResult = ""
while(i < trynum):
isfound, foundResult = _validateLDAPUser(user)
if(isfound):
break
i+=1
return foundResult def LDAPLogin(userName,Password):
try:
if(Password==""):
print "PassWord empty"
return
dn = GetDn(userName,10)
if(dn==''):
print "Not Exist User"
return
my_ldap = ldap.initialize(ldappath)
print my_ldap.simple_bind_s(dn,Password)
print "Login Ok"
except Exception,e:
print "Login Fail"
# print str(e) LDAPLogin("用户名","密码")
Python实现LDAP用户名密码验证的更多相关文章
- 【WCF】使用“用户名/密码”验证的合理方法
我不敢说俺的方法是最佳方案,反正这世界上很多东西都是变动的,正像老子所说的——“反(返)者,道之动”.以往看到有些文章中说,为每个客户端安装证书嫌麻烦,就直接采用把用户名和密码塞在SOAP头中发送,然 ...
- WCF 安全性之 自定义用户名密码验证
案例下载 http://download.csdn.net/detail/woxpp/4113172 客户端调用代码 通过代理类 代理生成 参见 http://www.cnblogs.com/woxp ...
- OpenVPN使用用户名/密码验证方式
OpenVPN推荐使用证书进行认证,安全性很高,但是配置起来很麻烦.还好它也能像pptp等vpn一样使用用户名/密码进行认证. 不管何种认证方式,服务端的ca.crt, server.crt, ser ...
- 【WCF】Silverlight+wcf+自定义用户名密码验证
本文摘自 http://www.cnblogs.com/virusswb/archive/2010/01/26/1656543.html 在昨天的博文Silverlight3+wcf+在不使用证书的情 ...
- WebService 用户名密码验证
原文:WebService 用户名密码验证 在项目开发的过程中,WebService是经常要用的,当调用WebService方法时,需要经过服务的验证才可以调用,一般就是用户名/密码验证,还有一个就是 ...
- WCF服务安全控制之netTcpBinding的用户名密码验证【转】
选择netTcpBinding WCF的绑定方式比较多,常用的大体有四种: wsHttpBinding basicHttpBinding netTcpBinding wsDualHttpBinding ...
- WCF用户名密码验证方式
WCF使用用户名密码验证 服务契约 namespace WCFUserNameConstract { [ServiceContract] public interface IWcfContract { ...
- 自定义实现wcf的用户名密码验证
目前wcf分为[传输层安全][消息层安全]两种,本身也自带的用户名密码验证的功能,但是ms为了防止用户名密码明文在网络上传输,所以,强制要求一旦使用[用户名密码]校验功能,则必须使用证书,按照常理讲, ...
- Python实现三次密码验证
需求:Python实现三次密码验证,每次验证结果需要提示,三次验证不通过需要单独提示 代码如下: user = '张无忌' password = '12345678' confirm_flag = F ...
随机推荐
- SSIS从理论到实战,再到应用(7)----常用的数据类型转换操作
原文:SSIS从理论到实战,再到应用(7)----常用的数据类型转换操作 上期回顾: SSIS从理论到实战,再到应用(6)----SSIS的自带日志功能 在抽取各种应用的数据时候,经常会遇到数据需要转 ...
- UI測试内容
我们在实际工作其中,针对web应用程序,也就是常常所说的B/S系统,能够从例如以下方面来进行用户界面測试: 导航測试 导航描写叙述了用户在一个页面内操作的方式,在不同的用户接口控制之间,比如butto ...
- Struts1——离BeanUtils看struts其原理1
在Struts中非常典型的特点就是使用了ActionForm来搜集表单数据,可是搜集到的表单数据所有都是String类型的.假设我们直接拿来使用我们会面临一个非常麻烦的问题就是频繁的类型装换. Str ...
- 使用myeclipse将Javaj项目标ar套餐邂逅classnotfound解决问题的方法
做一件事的今天,该Java项目打包成jar文件.折腾2小时,最终运行jar文件报告classnotfound异常,我觉得程序写入依赖jar包不玩成,但是,我手动添加.或不.网上找了很多办法.或不.后. ...
- 百度地图API显示多个标注点,解决提示信息问题以及给标注增加地图旁的文字连接提示的另一种解决办法
原文:百度地图API显示多个标注点,解决提示信息问题以及给标注增加地图旁的文字连接提示的另一种解决办法 公司的网站改版要求在一个页面显示百度地图.上面要同时显示很多标注点,标注点当然要有提示信息嘛,提 ...
- MongoDB学习笔记<四>
今天继续学习MongoDB的相关知识,主要包含例如以下: --find具体解释 --分页与排序 --游标和其它知识 1.指定返回的键 db.person.find({},{"_id" ...
- js模块开发
js模块开发(一) 现在嵌入页面里面的javascript代码越来越复杂,于是可能依赖也越来越严重,使用别人开发的js也越来越多,于是在理想情况下,我们只需要实现核心的业务逻辑,其他都可以加载别人已经 ...
- Java设计模式论述
为何须要设计模式: 模式是做事的方法,是实现目标,研磨技术的方法.这样的对高效技术不懈追求的思想,广泛见于诸多领域,比如制作精美佳肴的过程.对于不论什么一种迈向成熟的全新技艺,身处这个行业的人都须要寻 ...
- APP 半自适应 WEB页面
特别赶,响应式纯自适应的,有空写了新的发. (在手机上看,页面上看一定乱) <!DOCTYPE html><html> <head> <meta http-e ...
- MFC 界面编程 可参考资料
http://www.codeproject.com/Articles/26887/A-user-draw-button-that-supports-PNG-files-with-tr http:// ...