Установить порт ldap php - PullRequest
       2

Установить порт ldap php

1 голос
/ 10 октября 2019

В настоящее время у меня есть этот кусок кода:

<?php

function authenticate($user, $password) {
    if(empty($user) || empty($password)) return false;

    // active directory server
    $ldap_host = "ldaps.test.nl";
    $ldap_port = "389";

    // active directory DN (base location of ldap search)
    $ldap_dn = "OU=Users,OU=test users & Groups,DC=test,DC=nl";

    // active directory user group name
    $ldap_user_group = "Users";

    // active directory manager group name
    $ldap_manager_group = "IT_Inventory";

    // domain, for purposes of constructing $user
    $ldap_usr_dom = '@test.nl';

    // connect to active directory
    $ldap = ldap_connect($ldap_host);

    // configure ldap params
    ldap_set_option($ldap,LDAP_OPT_PROTOCOL_VERSION,3);
    ldap_set_option($ldap,LDAP_OPT_REFERRALS,0);

    // verify user and password
    if($bind = @ldap_bind($ldap, $user.$ldap_usr_dom, $password)) {
        // valid
        // check presence in groups
        $filter = "(sAMAccountName=".$user.")";
        $attr = array("memberof");
        $result = ldap_search($ldap, $ldap_dn, $filter, $attr) or exit("Unable to search LDAP server");
        $entries = ldap_get_entries($ldap, $result);
        ldap_unbind($ldap);

        // check groups
        $access = 0;
        foreach($entries[0]['memberof'] as $grps) {
            // is manager, break loop
            if(strpos($grps, $ldap_manager_group)) { $access = 2; break; }

            // is user
            if(strpos($grps, $ldap_user_group)) $access = 1;
        }

        if($access != 0) {
            // establish session variables
            $_SESSION['user'] = $user;
            $_SESSION['access'] = $access;
            return true;
        } else {
            // user has no rights
            return false;
        }

    } else {
        // invalid name or password
        return false;
    }
}
?>

Что я хочу сделать, это в ldap connect указать порт. Я уже сделал это, попробовав это:

$ldap = ldap_connect($ldap_host,$ldap_port);

Как я могу указать порт в ldap connect нормально, он нормально работает на ldaps.test.nl, но теперь сертификат прошел, и нам нужен еще один этотзанимает некоторое время, поэтому мне нужно обойти ldaps и просто использовать ldap, изменив порт.

Надеюсь, кто-нибудь может мне помочь?

1 Ответ

1 голос
/ 10 октября 2019

Когда вы используете ldap_connect($host, $port) протокол будет всегда будет простым ldap. Чтобы использовать ldaps, вам нужно позвонить ldap_connect с LDAP-URI. Так что в вашем случае это будет ldaps://ldaps.test.nl:389.

Поскольку вы в любом случае используете небезопасный ldap в настоящее время (389 - это LDAP-порт по умолчанию, и способ, которым вы вызываете ldap_connect , не может создать безопасное соединение) Я не совсем уверен, в чем заключается основная проблема. Потому что вы уже используете небезопасное соединение. Для получения дополнительной информации ознакомьтесь с документацией по адресу https://www.php.net/ldap_connect

. Узнайте, создано ли LDAP-соединение через уже существующий SSL / TLS-туннель, который не может быть создан из-за устаревшегосертификат? Тогда вам нужно будет закрыть этот туннель. Но, похоже, это не является частью PHP-скрипта, поэтому он настроен в другом месте.

В будущем я бы посоветовал использовать ldap_connect с URI в любом случае. А затем либо используйте ldaps в качестве протокола, либо используйте ldap_start_tls, чтобы немедленно запустить безопасное соединение после инициализации соединения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...