使用ldap库

时间:2016-11-16 17:57:58

标签: python authentication ssl active-directory openldap

我正在尝试连接到LDAP服务器进行身份验证。我们的LDAP服务器使用SSL,但我们不使用任何SSL证书。

以下是我的代码:

系统管理员提供了两个网址。有以下内容:

url1 = "ldap://100.x.x.x:389"
url2 = "ldaps://10.x.x.x:636"

我的第一个问题是我应该使用哪个网址? ldap://和ldaps://

之间有什么区别

LDAP身份验证代码如下,我试图同时使用(url1和url2):

conn = ldap.initialize(url)

ldap.TLS_AVAIL
1

conn.simple_bind_s(
        'CN={0},ou=users,DC=compnay,DC=com'.format(myemail),
        mypassword
    )

conn.simple_bind(
        'CN={0},ou=users,DC=compnay,DC=com'.format(myemail),
        mypassword
    )

如果我使用first_bind_s的第一个url(url1),则后面是错误:

  

INVALID_CREDENTIALS:{' info':u' 80090308:LdapErr:DSID-0C0903D9,评论:AcceptSecurityContext错误,数据52e,v2580',' desc':u& #39;凭据无效'}

但是当我使用simple_bind时,即使密码或用户名错误,它也会给我int。

simple_bind_s和simple_bind有什么区别。如何使用simple_bind进行身份验证?

1 个答案:

答案 0 :(得分:0)

simple_bind()simple_bind_s()之间的区别在于simple_bind()异步simple_bind_s()同步。< / p>

同步版本使程序等到完成后再返回结果,异步版本立即返回id代码并继续在后台运行,然后用id代码调用result()得到结果。

所以你对simple_bind()的号召可能会失败;你只是不知道它,因为你还没有得到结果。

大多数ldap函数都有异步和同步版本,例如add()add_s()delete()delete_s()search()search_s(),某些ldap操作(尤其是搜索)可能需要很长时间才能完成,因此如果您不希望程序长时间暂停,则可以使用异步版本。