В общем, пока юзал 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
)
Будут вопросы, пишите в ЛС, на протяжении полугода еще буду с этим всем работать 🙂
|