PHP 通过 Microsoft Entra Domain Services 将 LDAP / LDAPS 安全传输到 Azure Active Directory

问题描述 投票:0回答:1

我已使用 Microsoft Entra Domain Services 为 Azure Active Directory 启用了安全 LDAP/LDAPS。这在我拥有的应用程序中运行得很好,所以我知道它已启用并且运行良好。

我现在正在尝试构建一个 PHP 应用程序,以从我的 Azure AD 中获取所有用户的列表。

我一直在参考 https://www.php.net/manual/en/function.ldap-bind.php 来构建这个,但我不太熟悉 LDAP。

$ldapconn = ldap_connect("ldaps://ds.example.co.uk")
          or die("Could not connect to LDAP server.");

这工作正常,所以我假设我能够正常连接到该服务器。所以我然后匿名添加了 LDAP Bind

$ldapconn = ldap_connect("ldaps://ds.example.co.uk")
    or die("Could not connect to LDAP server.");

if ($ldapconn) {

    // binding anonymously
    $ldapbind = ldap_bind($ldapconn);

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

}

我收到错误

Warning: ldap_bind(): Unable to bind to server: Can't contact LDAP server in /ldap.php on line ##
LDAP bind anonymous failed...

第 ## 行是

$ldapbind = ldap_bind($ldapconn);

接下来我想这可能是因为我试图匿名做事,所以我尝试使用凭据

// using ldap bind
$ldaprdn  = '[email protected]';     // ldap rdn or dn
$ldappass = 'passwordexample123!';  // associated password

// connect to ldap server
$ldapconn = ldap_connect("ldaps://ds.example.co.uk")
    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...";
    }

}

但是我仍然收到错误。这次

Warning: ldap_bind(): Unable to bind to server: Can't contact LDAP server in /ldap.php on line ##
LDAP bind failed...

第 ## 行是

$ldapbind = ldap_bind($ldapconn, $ldaprdn, $ldappass);

关于我应该从哪里开始的任何建议

A)找到这里的问题了吗?在 Entra 的日志中还是在服务器日志中? (控制台什么也没显示。) B) 假设这是一个语法问题 - 这里有什么明显的问题吗?

我认为这个 OU 将是默认的 AADDC 用户,根据 https://learn.microsoft.com/en-us/entra/identity/domain-services/synchronization 但是我不知道放置的语法将其加入其中。

谢谢

php azure-active-directory ldap ldap-query entra
1个回答
0
投票

一些细节可以带来截然不同的效果:

  • 指定端口
  • 指定“ldap://”前缀(或 ldaps://)
  • 指定用户的域

尝试按照下面的代码指定它们来检查。

$LDAPHost = 'ldap://domain:389';
$LDAPUser = 'domain\ldap-user';
$LDAPPassword = 'xxx';

$ldap = ldap_connect($LDAPHost);
ldap_bind($ldap, $LDAPUser, $LDAPPassword) or die("Could not bind to LDAP");
© www.soinside.com 2019 - 2024. All rights reserved.