Python实现LDAP用户名密码验证

网上借鉴了不少东西,下面是python代码,备份后用。

思路,因为每个用户的组都不一样,这样就导致了dn不一致的情况,

据需要先根据用户名获取该用户的dn,然后再bind用户名和密码进行验证。

反正是实现了,至于方式对不对后续再研究了。

机器上要先安装python-ldap包


 1 #coding: utf-8
2 import ldap
3 ‘‘‘
4 实现LDAP用户登录验证,首先获取用户的dn,然后再验证用户名和密码
5 ‘‘‘
6
7 ldappath = "ldap://xxxx"#ldap服务器地址
8 baseDN = "DC=aaaa,DC=bbbb,DC=com"#根目录
9 ldapuser = "xxxx";#ldap服务器用户名
10 ldappass = "xxxx";#ldap服务器密码
11
12 #获取用户的dn
13 def _validateLDAPUser(user):
14 try:
15 l = ldap.initialize(ldappath)
16 l.protocol_version = ldap.VERSION3
17 l.simple_bind(ldapuser,ldappass)
18
19 searchScope = ldap.SCOPE_SUBTREE
20 searchFiltername = "sAMAccountName"
21 retrieveAttributes = None
22 searchFilter = ‘(‘ + searchFiltername + "=" + user +‘)‘
23
24 ldap_result_id = l.search(baseDN, searchScope, searchFilter, retrieveAttributes)
25 result_type, result_data = l.result(ldap_result_id,1)
26 if(not len(result_data) == 0):
27 r_a,r_b = result_data[0]
28 print r_b["distinguishedName"]
29 return 1, r_b["distinguishedName"][0]
30 else:
31 return 0, ‘‘
32 except ldap.LDAPError, e:
33 print e
34 return 0, ‘‘
35 finally:
36 l.unbind()
37 del l
38
39 #连接超时,尝试多次连接
40 def GetDn(user, trynum = 30):
41 i = 0
42 isfound = 0
43 foundResult = ""
44 while(i < trynum):
45 isfound, foundResult = _validateLDAPUser(user)
46 if(isfound):
47 break
48 i+=1
49 return foundResult
50
51 def LDAPLogin(userName,Password):
52 try:
53 if(Password==""):
54 print "PassWord empty"
55 return
56 dn = GetDn(userName,10)
57 if(dn==‘‘):
58 print "Not Exist User"
59 return
60 my_ldap = ldap.initialize(ldappath)
61 print my_ldap.simple_bind_s(dn,Password)
62 print "Login Ok"
63 except Exception,e:
64 print "Login Fail"
65 # print str(e)
66
67 LDAPLogin("用户名","密码")

时间: 2024-07-31 14:29:29

Python实现LDAP用户名密码验证的相关文章

【WCF】使用“用户名/密码”验证的合理方法

我不敢说俺的方法是最佳方案,反正这世界上很多东西都是变动的,正像老子所说的——“反(返)者,道之动”.以往看到有些文章中说,为每个客户端安装证书嫌麻烦,就直接采用把用户名和密码塞在SOAP头中发送,然后在服务器端自定义一个消息拦截器来验证用户名和密码. 以老周不靠谱的学识水平认为,这样做不好,直接把明文而且敏感信息放在SOAP头中传输,这尺度实在太大了,太暴露了,广电局是不会允许的,虽然现在流行穿得越少越好,但那些是婊子的境界.像用户名密码这些重要信息,怎么能直接传输呢,这很容易被偷窥的. 其实

【WCF】Silverlight+wcf+自定义用户名密码验证

本文摘自 http://www.cnblogs.com/virusswb/archive/2010/01/26/1656543.html 在昨天的博文Silverlight3+wcf+在不使用证书的情况下自定义用户名密码验证 中提到了,我想实现的安全效果,就是客户端访问的时候不需要https,也不需要安装证书(商业证书客户端会自动信任),但是暴露的wcf接口不是每个人可以调用的,因为sl+wcf只支持basicHttpBinding一种绑定,在这种绑定下面其实是可以不适用传输安全,然后消息安全选

WebService带用户名密码验证(复习用)

在项目开发的过程中,WebService是经常要用的,当调用WebService方法时,需要经过服务的验证才可以调用,一般就是用户名/密码验证,还有一个就是证书.下面程序使用的是用户名/密码的方式,很简单的一个程序. 先看服务端的代码(ws_Service) MySoapHeader.cs 这里通过继承SoapHeader实现对用户名/密码的验证 public class MySoapHeader:System.Web.Services.Protocols.SoapHeader { privat

WCF 安全性之 自定义用户名密码验证

案例下载 http://download.csdn.net/detail/woxpp/4113172 客户端调用代码 通过代理类 代理生成 参见 http://www.cnblogs.com/woxpp/p/6232298.html X509证书创建 http://www.cnblogs.com/woxpp/p/6232325.html 自定义用户名密码验证需要证书的支持 服务器端配置代码 <system.serviceModel> <services> <service n

OpenVPN2.4.3 基于用户名密码验证方式(实战)

安装部署参考"Open'VPN安装部署文档" 基于用户名密码验证: 1.修改server.conf: tls-auth ta.key 0 # This file is secret auth-user-pass-verify /usr/local/openvpn/config/checkpsw.sh via-env client-cert-not-required username-as-common-name script-security 3 注:如果加上client-cert-n

WCF用户名密码验证方式

WCF使用用户名密码验证 服务契约 namespace WCFUserNameConstract { [ServiceContract] public interface IWcfContract { [OperationContract] bool GetOnWcfService(ref string MessageInfo); } } 服务实现 namespace WcfUserNameService { public class WcfUserNameService : IWcfContr

WCF全双工以及用户名密码验证

WCF是支持TCP双向连接的,支持Server和Client之间互发协议,通过 订阅-发布 的全双工形式实现,全双工的用户名密码验证需要X509证书加密,单工模式的用户名密码验证时,X509证书是可选的. 在全双工模式下,会有断线的问题,目前我还没有根本解决,在单位的项目中只是做了断线重连的处理,但希望有识之人告知更好的方法... 下面是WCF用户验证的Demo,包含单工和全双工模式,刚入门,有什么好的建议多指教. 附上Demo下载地址:WCFDemo.rar Demo运行前需要注册X509证书

Centos6.4下快速构建基于用户名密码验证的openvpn服务器

如今VPN应用已经非常广泛了,之前就写过一篇关于PPTPD的博文.链接是http://cyr520.blog.51cto.com/714067/1161788. 家里最近新换了一个宽带.居然没办法用拨上公司的PptpdVPN,一直拨号状态一直停留在正在验证用户名和密码这一步.百度谷歌了一大圈,也没解决这个问题.貌似是因为宽带运营商屏蔽GRE协议的原因.作为运维人员,不能及时的连上公司的内部网络是一件很让人不爽的事情. 干脆再搞一套OpenVPN吧,据说OpenVPN非常强大,可以适应很复杂的网络

MongoDB开启用户名密码验证

mongodb将所有的用户信息存在admin数据库的集合system.users中,这些信息主要包括用户名.密码和数据库信息.mongodb默认不启用授权认证,只要能连接到该服务器,就可连接到mongod.若要启用安全认证,Windows下需要更改注册表,Linux下则要更改配置文件.这里只介绍Windows下的操作. 一.创建管理员用户 1 用show dbs查看数据库,发现找不到admin数据库 2 创建用户admin db.createUser( { "user":"a