2017-11-15 14 views
2

나는 AD와 LDAP에 대해서는 잘 모르지만 Python에서 가장 간단한 LDAP/AD 로그인 기능을 구현하려고합니다. 지금까지 여러 다른 모듈을 테스트했지만 Lo 운. 가장 유망한 하나 ldap3 수 있습니다 :이 옳은 길인지 아닌지AD/LDAP를 통해 인증

>>> import ldap3 
>>> server = ldap3.Server('myserver') 
>>> connection = ldap3.Connection(server) 
>>> connection.bind() 
True 
>>> connection.search(search_base='DC=mydomain,DC=com', search_filter='(&(objectClass=person)([email protected]))', search_scope='LEVEL', attributes=ldap3.ALL_ATTRIBUTES) 
True 
>>> connection.response[0] 
{'uri': ['ldap://ForestDnsZones.mydomain.com/DC=ForestDnsZones,DC=mydomain,DC=com??base'], 'type': 'searchResRef'} 
>>> connection.result 
{'result': 0, 'description': 'success', 'dn': '', 'message': '', 'referrals': None, 'type': 'searchResDone'} 

당신은 나에게 몇 가지 조언 해 줄 수 있을까?

셋업 내가 그것을에서 메타 데이터의 몇 가지 유형을 추출 할 수있어로, 기초 충분 보인다 : 나는 또한 flask-ldap3-login을 시도했습니다

>>> server._get_dsa_info(connection) 
>>> server._dsa_info 
DSA info (from DSE): 
    Supported LDAP versions: 3, 2 
    Naming contexts: 
    DC=mydomain,DC=com 
    CN=Configuration,DC=mydomain,DC=com 
    CN=Schema,CN=Configuration,DC=mydomain,DC=com 
    DC=DomainDnsZones,DC=mydomain,DC=com 
    DC=ForestDnsZones,DC=mydomain,DC=com 

    Supported controls: 
    1.2.840.113556.1.4.1338 - Verify name - Control - MICROSOFT 
    1.2.840.113556.1.4.1339 - Domain scope - Control - MICROSOFT 
    1.2.840.113556.1.4.1340 - Search options - Control - MICROSOFT 
    ... 

, 그러나 우리의 AD는 것을 의심하기 시작하고있다 내가 갖는으로, 표준에 따라 구성되지 않은 :

... 
>>> response = ldap_manager.authenticate('me', 'my_pass') 
LDAPNoSuchObjectResult - 32 - noSuchObject - CN=Schema,CN=Configuration,DC=mydomain,DC=com - 0000208D: NameErr: DSID-0315270B, problem 2001 (NO_OBJECT), data 0, best match of: 
     'CN=Schema,CN=Configuration,DC=mydomain,DC=com' 
    - searchResDone - None 

추가 정보를 요구하는 것을 망설이지 말라, 나는 그것을 알아낼 최선 내가 할 수있는하려고합니다.

CN=Lastname Firstname,OU=Consultants,OU=Users,OU=SE,OU=MYDOMAIN,DC=mydomain,DC=com 

일부 값은 다음과 같습니다 :

objectClass = top;person;organizationalPerson;user 
name = Lastname Firstname 
userPrincipalName = [email protected] 

또한, CN=Schema,CN=Configuration,DC=mydomain,DC=com에서이 CN=Aggregate,CN=Schema,CN=Configuration,DC=mydomain,DC=com 하나만 하위 스키마이고, 비어 보이는 예를 들어, 내 자신의 사용자는에 있습니다. 어떤 이유로 저는 이것이 플라스크 인 것 같아요 - LDAP3 로그인이 사용하려고 시도합니다.

답변

1

내 문제는 ldap3.Connection을 사용하여 바인딩 할 때 로그인을 사용하지 않았다는 것입니다.

attrs = connection.response[0]['attributes'] 
print(attrs['displayName']) 
for memb in attrs['memberOf']: 
    print(memb.partition('=')[2].partition(',')[0]) 
: 당신은 어떤 데이터를 인쇄하고자하는 경우

import ldap3 
user = '[email protected]' 
password = 'mypassword' 
server = ldap3.Server('myserver') 
connection = ldap3.Connection(server, user=user, password=password) 
connection.bind() 
connection.search(search_base='DC=mycompany,DC=com', search_filter='(&(objectClass=user)(userPrincipalName='+user+'))', search_scope='SUBTREE', attributes='*') 

그리고이 앞으로 방법이 될 것 같다