【问题标题】:Set port ldap php设置端口 ldap php
【发布时间】:2019-10-10 14:35:39
【问题描述】:

目前我有这段代码:

<?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 连接中指定端口。 我已经通过尝试这样做了:

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

我如何在 ldap 连接中指定端口,它在 ldaps.test.nl 上正常工作,但现在证书已经通过,我们需要另一个证书,这需要一点时间,所以我需要绕过 ldaps,只使用 ldap通过更改端口。

希望有人能帮助我吗?

【问题讨论】:

    标签: php ldap


    【解决方案1】:

    当您使用ldap_connect($host, $port) 时,该协议将始终为普通ldap。要使用 ldaps,您需要使用 LDAP-URI 调用 ldap_connect。所以在你的情况下是ldaps://ldaps.test.nl:389

    由于您目前正在使用不安全的 ldap(389 是默认 LDAP 端口,而您调用 ldap_connect 无法建立安全连接的方式)我不确定是什么根本问题是。因为您已经在使用不安全的连接。欲了解更多信息,请查看https://www.php.net/ldap_connect的文档

    您是否查看过 LDAP 连接是否是通过由于证书过期而无法创建的现有 SSL/TLS 隧道创建的?然后你需要关闭那个隧道。但这似乎不是 PHP 脚本的一部分,因此在其他地方进行了配置。

    对于未来,我建议在任何情况下都使用带有 URI 的 ldap_connect。然后要么使用ldaps作为协议,要么使用ldap_start_tls在初始化连接后立即启动安全连接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-04
      • 2018-02-22
      相关资源
      最近更新 更多