adldap2无法连接到AD,除非使用AD显示名称

时间:2019-11-22 22:49:38

标签: php ldap adldap

adldap2版本:10.1

LDAP类型:Active Directory(Windows 2012 R2 Essentials)

PHP版本:7.1

我们正在使用Adldap2(通过composer安装),并且运行良好。在开发和生产环境中,只要我们使用AD的“显示名称”(“用户”>“常规”)中显示的名称登录,我们就能成功使用AD进行身份验证。现在,我们被要求在用户属性的“帐户”标签中使用用户登录名(我相信是 samAccountName ),但是adldap2始终会通过身份验证(“ 无效的凭据”)

我们正在运行的服务器不是域的成员。此外,我们不使用“管理员”帐户绑定到域(adldap2的优点之一),但是我们确实向AD提交了“标准”用户凭据以进行身份​​验证。我们这样做如下:

require_once APP_FOLDER . '../vendor/autoload.php';
$ldap = json_decode(file_get_contents(CONFIG_FOLDER . 'ldap.json'), true);
$adConn = $ldap['connection'];
$adConn['username'] = $_POST['username'];
$adConn['password'] = $_POST['password'];
$ad = new \Adldap\Adldap();
$ad->addProvider($adConn);
try {
$provider = $ad->connect();
} catch (\Adldap\Auth\BindException $e) {
var_dump($e);
}

if(isset($provider)){
$user = $provider->search()->users()->find($_POST['username']);
echo '<br>DisplayName: ' . $user->getDisplayName();
echo '<br>AccountName: ' . $user->getAccountName();
}

ldap.json仅包含主机,base_dn的内容以及虚拟用户名和密码,在提交登录名后将替换为提供的凭据。

{
"connection": {
"hosts": [
"192.168.1.250"
],
"base_dn": "dc=demo,dc=local",
"username": "dummy",
"password": "dummy",
"port": "389",
"use_ssl": false,
"use_tls": false
}
}

在AD内,我有一个用于测试的帐户,如下所示:

  • (“常规”选项卡)显示名称:测试用户
  • (“帐户”选项卡)用户登录名:TestUser

使用基本的登录表单,可以完美地输入用户名作为DisplayName。但是,当我输入登录名时,它将失败。

就好像$ ad-> connect()仅将DisplayName作为用户名,而不是其他任何潜在的产品,例如(在我的情况下)AccountName?

我在这里缺少基本/重要的东西吗(!)?

0 个答案:

没有答案