LDAP | Проверка логина и пароля пользователя | Авторизация

Vovich

HOT
Автор темы
Проверенный
717
196
В общем, пока юзал Python Flask, делал в общем сервис один, и понял что собственно с LDAP не так уж и просто работать как казалось бы.
Остановился на банальной авторизации, кароче суть не в том, пришлось писать самому (читать документацию, что я как обычно не делаю), ну что бы другие не мучились, вот уже готовая функция которая возвращает True если креды совпали и False если не совпали.
Там все просто, сначала коннект под админом, поиск пользователя по всей базе, потом получение bind dn (грубо говоря путь), и авторизация уже под ним (под полученным юзером), после возвращение результата, но готовой я ее так и не нашел, по этому вот.

Python:
from ldap3 import Server, Connection, ALL, SUBTREE

def auth_ldap(nname,passw):
    s = Server('ldaps://ldap.k21', port=636, use_ssl=True, get_info=ALL)  # параметры подключения к серверу вашему
    c = Connection(s, user='cn=admin,dc=k21', password='adminpassword') # собственно, креды админа

    if not c.bind():
        #print('Do not connect to ldap ADMIN ACCOUNT, incorrect credentials')
        adm = False
        return adm
    else:
        #print('You successful connect to ldap ADMIN ACCOUNT, correct credentials')
        adm = True
       
        c.search(search_base = 'dc=k21', # база в которой искать
        search_filter = '(cn=' + nname + ')', #по какому параметру искать, ищем по cn (обычно логин)
        search_scope = SUBTREE, # искать по всему дереву (дочерные группы и т.д.)
        paged_size = 5)
        for entry in c.response:
            mk = entry['dn'] # получаем dn пользователя
        #print(mk)      
        c.unbind()
        try:
            c2 = Connection(s, user=mk, password=passw)
            if not c2.bind():
                #print('Do not connect to ldap, incorrect credentials user')
                aut = False
            else:
                #print('You successful connect to ldap, correct credentials user')
                aut = True
            c2.unbind()
        except:
            #print('Если логин не совпал')
            aut = False
        return aut 

ans = auth_ldap('user','password')
print(ans)


Будут вопросы, пишите в ЛС, на протяжении полугода еще буду с этим всем работать 🙂​
 

winten

Потрачен
409
181
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Python:
if not c2.bind():
                #print('Do not connect to ldap, incorrect credentials user')
                aut = False
            else:
                #print('You successful connect to ldap, correct credentials user')
                aut = True
Python:
auth = False if not c2.bind() else True
 
  • Нравится
  • Bug
Реакции: Vovich и quesada

Vovich

HOT
Автор темы
Проверенный
717
196
Python:
if not c2.bind():
                #print('Do not connect to ldap, incorrect credentials user')
                aut = False
            else:
                #print('You successful connect to ldap, correct credentials user')
                aut = True
Python:
auth = False if not c2.bind() else True
Ну с оптимизацией я не дружу, так что это уже дело каждого лично, потом трансформировать его как кому удобно.
А так, спасибо за замечание.