相关疑难解决方法(0)

使用python-ldap对Active Directory进行身份验证始终返回(97,[])

此问题类似,我尝试使用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 …

python authentication active-directory python-ldap

13
推荐指数
1
解决办法
2万
查看次数

使用Python的SSO的SPNEGO(kerberos令牌生成/验证)

我正在尝试实现一个简单的单点登录方案,其中一些参与的服务器将是Windows(IIS)框.看起来SPNEGO是一条合理的道路.

这是场景:

  • 用户使用他的用户名和密码登录我的SSO服务.我使用某种机制来验证他.
  • 稍后用户想要访问App A.
    • 用户对App A的请求被SSO服务拦截.SSO服务使用SPNEGO将用户登录到App A:
      • SSO服务点击App A网页,获得"WWW-Authenticate:Negotiate"响应
      • SSO服务代表用户生成"授权:协商xxx"响应,响应App A.用户现在登录到App A.
    • SSO服务拦截后续用户对App A的请求,在将Authorization头传递给App A之前将其插入其中.

听起来不错吗?

我需要两件事(至少我现在能想到的):

  • 能够代表用户生成"授权:协商xxx"令牌,最好使用Python
  • 在Python中验证"授权:协商xxx"标头的能力(对于项目的后续部分)

python kerberos active-directory spnego single-sign-on

8
推荐指数
1
解决办法
9848
查看次数