如何使用Python + LDAP对AD进行身份验证.我目前正在使用python-ldap库,它所产生的就是眼泪.
我甚至无法绑定执行简单的查询:
import sys import ldap Server = "ldap://my-ldap-server" DN, Secret, un = sys.argv[1:4] Base = "dc=mydomain,dc=co,dc=uk" Scope = ldap.SCOPE_SUBTREE Filter = "(&(objectClass=user)(sAMAccountName="+un+"))" Attrs = ["displayName"] l = ldap.initialize(Server) l.protocol_version = 3 print l.simple_bind_s(DN, Secret) r = l.search(Base, Scope, Filter, Attrs) Type,user = l.result(r,60) Name,Attrs = user[0] if hasattr(Attrs, 'has_key') and Attrs.has_key('displayName'): displayName = Attrs['displayName'][0] print displayName sys.exit()
运行它myusername@mydomain.co.uk password username
会给我两个错误之一:
Invalid Credentials
- 当我输入错误或故意使用错误的凭据时,它无法进行身份验证.
ldap.INVALID_CREDENTIALS:{'info':'80090308:LdapErr:DSID-0C090334,评论:AcceptSecurityContext错误,数据52e,vece','desc':'凭证无效'}
要么
ldap.OPERATIONS_ERROR:{'info':'00000000:LdapErr:DSID-0C090627,注释:为了执行此操作,必须在连接上完成成功绑定.,data 0,vece','desc':'操作错误"}
我错过了什么来正确绑定?
我在fedora和windows上遇到了同样的错误.
我失踪了
l.set_option(ldap.OPT_REFERRALS, 0)
从init.
如果您愿意使用pywin32,则可以使用Python的Win32调用.这就是我们在CherryPy Web服务器中所做的事情:
import win32security token = win32security.LogonUser( username, domain, password, win32security.LOGON32_LOGON_NETWORK, win32security.LOGON32_PROVIDER_DEFAULT) authenticated = bool(token)
这对我有用,l.set_option(ldap.OPT_REFERRALS,0)是访问ActiveDirectory的关键.此外,我认为你应该添加一个"con.unbind()",以便在完成脚本之前关闭连接.
这是一些对我有用的简单代码。
import ldap # run 'pip install python-ldap' to install ldap module. conn = ldap.open("ldaphost.company.com") conn.simple_bind_s("myuser@company.com", "mypassword")
这是基于先前的答案。