PHP LDAP 连接

标签 php active-directory ldap

我正尝试在 LDAP 中使用 php-ldap 进行连接。我在使用 ldap_bind() 时遇到问题:

$username = 'josue.ruiz';
$password = 'pass';
$ldapconfig['host'] = '10.10.10.11';
$ldapconfig['port'] = 389;
$ldapconfig['basedn'] = 'dc=domain,dc=com';

$ds=ldap_connect($ldapconfig['host'], $ldapconfig['port']);
ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);

$dn="cn=".$username.",ou=Technology,".$ldapconfig['basedn'];

if ($bind=ldap_bind($ds, $dn, $password)) {
    echo("Login correct");
} else {
    echo("Login incorrect");
}

我收到这条消息:

Warning: ldap_bind(): Unable to bind to server: Invalid credentials in ...

但是当我尝试这种方式时:

ldap_bind($ds,'josue.ruiz@domain.com','pass'); 

它工作正常,但对我来说它不起作用,因为我想按 OU 进行过滤,而通过这种方式我做不到。有人对这个问题有什么建议吗?

最佳答案

当您尝试执行 ldap_bind 时,您只是在连接并确定凭据是否有效。您需要做的是将您的域添加到用户名并让它连接。然后,如果您想确定用户是否是具有 ldap_search() 的“技术”OU,请考虑这样做:

$domain = 'mydomain.com';
$username = 'josue.ruiz';
$password = 'pass';
$ldapconfig['host'] = '10.10.10.11';
$ldapconfig['port'] = 389;
$ldapconfig['basedn'] = 'dc=domain,dc=com';

$ds=ldap_connect($ldapconfig['host'], $ldapconfig['port']);
ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);

$dn="ou=Technology,".$ldapconfig['basedn'];
$bind=ldap_bind($ds, $username .'@' .$domain, $password);
$isITuser = ldap_search($bind,$dn,'(&(objectClass=User)(sAMAccountName=' . $username. '))');
if ($isITuser) {
    echo("Login correct");
} else {
    echo("Login incorrect");
}

关于PHP LDAP 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9232950/

相关文章:

php - 正确的单元测试

php - 使用redis的新闻提要

php - 使用 jquery/ajax 和 php 将数据发送到 json 文件

c# - GroupPrincipal 方法 FindByIdentity 抛出奇怪的异常

c# - System.IdentityModel.Metadata 和 X509SecurityToken 在 ASP.NET Core 中不可用

带有 LDAP 的 svnserve

windows - 根据 LDAP 验证密码

php - mySQL 上一个/下一个查询

php - 如何根据包含相同值的另一行对行值求和?

java - LDAP Java - 跨受信任域搜索组成员身份