- 717
- 197
В общем, пока юзал Python Flask, делал в общем сервис один, и понял что собственно с LDAP не так уж и просто работать как казалось бы.
Остановился на банальной авторизации, кароче суть не в том, пришлось писать самому (читать документацию, что я как обычно не делаю), ну что бы другие не мучились, вот уже готовая функция которая возвращает True если креды совпали и False если не совпали.
Там все просто, сначала коннект под админом, поиск пользователя по всей базе, потом получение bind dn (грубо говоря путь), и авторизация уже под ним (под полученным юзером), после возвращение результата, но готовой я ее так и не нашел, по этому вот.
Остановился на банальной авторизации, кароче суть не в том, пришлось писать самому (читать документацию, что я как обычно не делаю), ну что бы другие не мучились, вот уже готовая функция которая возвращает 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)
Будут вопросы, пишите в ЛС, на протяжении полугода еще буду с этим всем работать 🙂