2015-02-18 12 views
8

Tôi đang cố gắng cập nhật một số mã thành python3, sử dụng ldap3 phiên bản '0.9.7.4'. (https://pypi.python.org/pypi/ldap3)Cách liên kết (xác thực) người dùng với ldap3 trong python3

Trước đây, tôi đã sử dụng python-ldap với python2 để xác thực người dùng như thế này:

import ldap 
address = "ldap://HOST:389" 
con = ldap.initialize(address) 
base_dn = "ourDN=jjj" 
con.protocol_version = ldap.VERSION3 
search_filter = "(uid=USERNAME)" 
result = con.search_s(base_dn, ldap.SCOPE_SUBTREE, search_filter, None) 
user_dn = result[0][0] # get the user DN 
con.simple_bind_s(user_dn, "PASSWORD") 

này đúng cách trả (97, [], 2, []) vào đúng mật khẩu, và tăng ldap.INVALID_CREDENTIALS trên một nỗ lực ràng buộc sử dụng một mật khẩu không chính xác .

Sử dụng ldap3 trong python3 Tôi đang làm như sau:

from ldap3 import Server, Connection, AUTH_SIMPLE, STRATEGY_SYNC, ALL 
s = Server(HOST, port=389, get_info=ALL) 
c = Connection(s, authentication=AUTH_SIMPLE, user=user_dn, password=PASSWORD, check_names=True, lazy=False, client_strategy=STRATEGY_SYNC, raise_exceptions=True) 
c.open() 
c.bind() 

Nó nâng cao ngoại lệ sau đây:

ldap3.core.exceptions.LDAPInvalidCredentialsResult: LDAPInvalidCredentialsResult - 49 - invalidCredentials - [{'dn': '', 'message': '', 'type': 'bindResponse', 'result': 0, 'saslCreds': 'None', 'description': 'success', 'referrals': None}] 

Tôi đang sử dụng giá trị user_dn trả về bởi tìm kiếm ldap python2 của, vì đây xuất hiện để được làm việc trong python2.

Làm thế nào tôi có thể nhận được điều này để ràng buộc đúng cách bằng cách sử dụng ldap3 trong python3?

(Một điều lạ, tôi nhận thấy, đó là LDAPInvalidCredentialsResult của ldap3 bao gồm 'description': 'success'. Tôi đoán này chỉ có nghĩa là phản ứng nhận được thành công ...)

+0

Ok được thử nghiệm bằng cách sử dụng mật khẩu * sai * và nhận thấy rằng Ngoại lệ kết quả là khác nhau, 'ldap3.core.exceptions.LDAPInvalidCredentialsResult: LDAPInvalidCredentialsResult - 49 - invalidCredentials - None - None - bindResponse - None' và không chứa' ' mô tả ':' success'' ... bug? – monkut

Trả lời

11

Tôi là tác giả của ldap3, hãy đặt raise_exceptions=False trong Định nghĩa kết nối và kiểm tra connection.result sau khi liên kết. Bạn nên biết lý do tại sao số bind() của bạn không thành công.

+0

Cảm ơn! Tôi đã kiểm tra bằng cách sử dụng 'raise_exceptions = False', nhưng' connection.result' dường như không chứa bất kỳ điều gì hữu ích, mà tôi có thể nói: '>>> c.result {'dn': '', 'result': 49 , 'message': '', 'description': 'invalidCredentials', 'type': 'bindResponse', 'saslCreds': 'None', 'referrals': None} ' – monkut

+0

Khôi phục lại kết nối,' c' ở trên với 'raise_exceptions = True' vẫn trả về' 'description': 'success'', khi mật khẩu đã cho là đúng. – monkut

+0

Lưu ý rằng nội dung 'c.result' không thay đổi nếu mật khẩu đúng, hay không, không giống như kết quả ngoại lệ. – monkut

Các vấn đề liên quan