如何在PHP身份验证的LDAP身份验证中使用电子邮件而不是用户名?

时间:2015-08-13 09:47:41

标签: php active-directory ldap



目前,我可以使用用户名和密码登录。我希望能够使用电子邮件地址而不是用户名登录。你怎么建议我这样做?

剧本:

$ldap['username'] = "domain\user123";
$ldap['password'] = "password123";
$ldap['host']   = 'site.domain.com';
$ldap['port']   = 389;
$ldap['dn'] = "CN=Users, DC=domain, DC=com";

$ldap['conn'] = ldap_connect( $ldap['host'], $ldap['port'] )
or die("Could not connect to {$ldap['host']}" );

$ldap['bind'] = ldap_bind($ldap['conn'], $ldap['username'], $ldap['password']);

if( !$ldap['bind'] )
{
echo "Failed";
}

else if( $ldap['bind'] )
{
echo "Success";
}

非常感谢任何帮助。

非常感谢!

2 个答案:

答案 0 :(得分:3)

不是电子邮件地址,除非它与userPrincipalName相同。

使用Microsoft Active Directory时,您可以使用userprincipal名称绑定samAccountName(通常需要domain \ samAccountName),当然还有DN。

答案 1 :(得分:1)

您必须与具有LDAP服务器读取权限的用户绑定,使用相关电子邮件地址搜索用户的DN,然后使用该DN执行第二次绑定。如果第二个绑定成功,则用户登录,如果第二个绑定失败,则登录失败。

我已经在https://gist.github.com/heiglandreas/5689592

创建了一个显示该过程的要点