与此问题类似,我尝试使用python ldap(CentOS 6.2 x86_64,Python 2.6.6,python-ldap 2.3.10)对2003 Active Directory执行简单身份验证.
尽管遵循init中的所有常规步骤,包括
conn.set_option(ldap.OPT_REFERRALS, 0)
Run Code Online (Sandbox Code Playgroud)
如果我传递正确的凭据,我总会得到一个(97, [])返回:
>>> import ldap
>>> conn = ldap.initialize('ldap://ad.server.domain.com')
>>> conn.protocol_version = 3
>>> conn.set_option(ldap.OPT_REFERRALS, 0)
>>> conn.simple_bind_s('user@domain.com', 'WrongPassword')
ldap.INVALID_CREDENTIALS: {'info': '80090308: LdapErr: DSID-0C090334, comment: AcceptSecurityContext error, data 52e, vece', 'desc': 'Invalid credentials'}
>>> conn.simple_bind_s('user@domain.com', 'CorrectPassword')
(97, [])
Run Code Online (Sandbox Code Playgroud)
错误代码97不成功; 这LDAP_REFERRAL_LIMIT_EXCEEDED是从AD返回的错误.我也不能将它用作事实上的成功指标,因为:
>>> conn.simple_bind_s('', 'CorrectPassword')
(97, [])
>>> conn.simple_bind_s('', '')
(97, [])
Run Code Online (Sandbox Code Playgroud)
更令人沮丧的是,这个脚本是使用网:: LDAP的老Perl脚本,其迁移也为成功认证绑定返回0相同的AD和服务器.
我在python-ldap上找到的所有信息表明我正在做的事情应该是Just Work; 我倾向于认为AD服务器有问题,但Perl脚本确实在成功绑定时返回正确的LDAP代码.
我已经在旧的CentOS 5.5盒子上测试了python-ldap …
我正在尝试实现一个简单的单点登录方案,其中一些参与的服务器将是Windows(IIS)框.看起来SPNEGO是一条合理的道路.
这是场景:
听起来不错吗?
我需要两件事(至少我现在能想到的):