Безопасная аутентификация LDAP? - PullRequest
0 голосов
/ 24 июня 2018

Я хотел бы авторизовать своих пользователей на сервере Active Directory для доступа к веб-серверу. Однако я не хочу, чтобы пароли были отправлены в открытом виде на веб-сервер.

Все решения, которые я нашел, используют запрос POST с простым паролем, как в этом примере:

<?php

// using ldap bind
$ldaprdn  = 'uname';     // ldap rdn or dn
$ldappass = 'password';  // associated password

// connect to ldap server
$ldapconn = ldap_connect("ldap.example.com")
    or die("Could not connect to LDAP server.");

if ($ldapconn) {

    // binding to ldap server
    $ldapbind = ldap_bind($ldapconn, $ldaprdn, $ldappass);

    // verify binding
    if ($ldapbind) {
        echo "LDAP bind successful...";
    } else {
        echo "LDAP bind failed...";
    }

}

?>

Есть ли способ хэшировать пароль на стороне клиента, а затем отправлять токен на сервер, который используется для аутентификации на сервере LDAP?

PHP - только пример, мой вопрос не зависит от языка.

1 Ответ

0 голосов
/ 30 июня 2018

Если вам известен алгоритм хеширования серверной части LDAP, то вы можете хэшировать пароль в javascript и отправлять только его на сервер.Это означает, что ваш сценарий аутентификации LDAp должен иметь возможность считывать все хэши паролей, чтобы иметь возможность сравнивать их с предварительно хешированным паролем.

Я бы посчитал, что это более высокий риск, чем отправка пароля в виде открытого текста через защищенное TLS HTTP-соединение (также известное как Https) на сервер, который затем использует механизм связывания по умолчанию также через защищенный tls (ldaps или starttls).

И поскольку вы не используете механизм связывания, все возможные принудительные применения политик паролей или заблокированных паролей, которые легко доступны и реализованы и поддерживаются вашими директорами direcrory, теперь также должны быть перестроены и поддержаны вами.

...