ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   Python (https://forum.antichat.xyz/forumdisplay.php?f=205)
-   -   LDAP | Проверка логина и пароля пользователя | Авторизация (https://forum.antichat.xyz/showthread.php?t=1369315)

Vovich 10.11.2020 14:58

В общем, пока юзал 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
)



Цитата:


True

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

winten 10.11.2020 19:18

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


Vovich 11.11.2020 11:16

Цитата:

Сообщение от winten

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



Ну с оптимизацией я не дружу, так что это уже дело каждого лично, потом трансформировать его как кому удобно.

А так, спасибо за замечание.

Михаил Бластов 11.11.2020 20:42

fucking english

Vovich 12.11.2020 12:30

Цитата:

Сообщение от Михаил Бластов

fucking english

3-й класс, 2-й семестр где-то.


Время: 16:55