警告:ldap_bind():无法绑定到服务器:PHP和ldap的凭据无效
我正在尝试连接到LDAP服务器以验证用户凭据 我发现一些用户有同样的问题,但他们的解决方案对我不起作用 以下是我正在使用的:警告:ldap_bind():无法绑定到服务器:PHP和ldap的凭据无效,php,ldap,ldapconnection,Php,Ldap,Ldapconnection,我正在尝试连接到LDAP服务器以验证用户凭据 我发现一些用户有同样的问题,但他们的解决方案对我不起作用 以下是我正在使用的: <?php define('LDAP_SERVER', 'LDAP://pdc.mydomain.com'); define('LDAP_PORT', 389); define('LDAP_TOP', 'dc=mydomain,dc=com'); if(isset($_POST['username'])) { if(!($ds = ldap_connect(
<?php
define('LDAP_SERVER', 'LDAP://pdc.mydomain.com');
define('LDAP_PORT', 389);
define('LDAP_TOP', 'dc=mydomain,dc=com');
if(isset($_POST['username']))
{
if(!($ds = ldap_connect(LDAP_SERVER, LDAP_PORT)))
{
die ("Could not connect to mydomain domain");
}
$un = $_POST['username'].",".LDAP_TOP;
//echo stripslashes($un)."<br>";
$ldapbind = ldap_bind($ds, stripslashes($un), $_POST['password']);
if($ldapbind)
echo "login success";
else
echo "login failed";
}
?>
我尝试过使用“mydomain\myusername”和“myusername”
我添加了stripslashes()函数,但这两个函数都没有进行测试,而且仍然没有骰子
我每次遇到的错误是:警告:ldap_bind():无法绑定到服务器:凭据无效
任何帮助都将不胜感激
TIA检查您的登录和密码是否正确。 并在登录前添加域。请参见示例底部(HQ\login):
我知道这是一个非常老的问题,如果您仍然需要答案,那么如果在单个php文件中运行此代码会发生什么
$username = 'hello';
$password = '123123';
$server = '192.168.32.4';
$domain = '@yourdomain.local';
$port = 389;
$connection = ldap_connect($server, $port);
if (!$connection) {
exit('Connection failed');
}
// Help talking to AD
ldap_set_option($connection , LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($connection , LDAP_OPT_REFERRALS, 0);
$bind = @ldap_bind($connection, $username.$domain, $password);
if (!$bind) {
exit('Binding failed');
}
// This is where you can do your work
echo 'Hello from LDAP';
ldap_close($connection );
更多信息如下。我使用了以下功能:
function authenticate($username, $password){
include 'conf/config.inc.php';
$ldap_Userdn = getUserDN($username);
if($ldap_Userdn!=""){
$ldap_con = ldap_connect($ldap_hostname,$ldap_port);
ldap_set_option($ldap_con, LDAP_OPT_PROTOCOL_VERSION, 3);
if(ldap_bind($ldap_con, $ldap_Userdn, $password)){
return true;
} else {
//echo "<br>Error bind checkPassword function<br>";
return false;
}
} else {
echo "Error to find user DN" . ldap_error($ldap_con);
}
ldap_close($ldap_con);
}
function getUserDN($username){
include 'conf/config.inc.php';
$data = "";
$ldap_con = ldap_connect($ldap_hostname,$ldap_port);
ldap_set_option($ldap_con, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldap_con, LDAP_OPT_REFERRALS, 0);
if(ldap_bind($ldap_con, $ldap_dn, $ldap_password)){
$filter="(cn=$username)";
$dn=$ldap_search; //even if it seems obvious I note here that the dn is just an example, you'll have to provide an OU and DC of your own
$res = ldap_search($ldap_con, $ldap_search, $filter);
$first = ldap_first_entry($ldap_con, $res);
$data = ldap_get_dn($ldap_con, $first);
} else {
echo "<br>Error bind getUserDN function<br>" . ldap_error($ldap_con);
}
ldap_close($ldap_con);
return $data;
}
函数身份验证($username,$password){
包括“conf/config.inc.php”;
$ldap_Userdn=getUserDN($username);
如果($ldap\u Userdn!=“”){
$ldap\u con=ldap\u connect($ldap\u主机名,$ldap\u端口);
ldap_设置_选项($ldap_con,ldap_OPT_协议_版本,3);
if(ldap\u bind($ldap\u con,$ldap\u Userdn,$password)){
返回true;
}否则{
//echo“
错误绑定检查密码功能
”;
返回false;
}
}否则{
echo“查找用户DN时出错”。ldap\u错误($ldap\u-con);
}
ldap\u close($ldap\u con);
}
函数getUserDN($username){
包括“conf/config.inc.php”;
$data=“”;
$ldap\u con=ldap\u connect($ldap\u主机名,$ldap\u端口);
ldap_设置_选项($ldap_con,ldap_OPT_协议_版本,3);
ldap\u set\u选项($ldap\u con,ldap\u OPT\u references,0);
if(ldap\u绑定($ldap\u con、$ldap\u dn、$ldap\u密码)){
$filter=“(cn=$username)”;
$dn=$ldap\u search;//即使我在这里注意到dn只是一个示例,您也必须提供自己的OU和DC
$res=ldap\u search($ldap\u con,$ldap\u search,$filter);
$first=ldap\u first\u条目($ldap\u con,$res);
$data=ldap\u get\u dn($ldap\u con,$first);
}否则{
echo“
错误绑定getUserDN函数
”.ldap\u错误($ldap\u-con);
}
ldap\u close($ldap\u con);
返回$data;
}
这是我的config.inc.php:
<?php
$ldap_hostname = "my openldap IP";
$ldap_port = "389";
$ldap_dn = "cn=Manager,dc=mydomain,dc=com";
$ldap_search = "dc=mydomain,dc=com";
$ldap_password ="my password";
?>
您能给我们展示一下$\u POST['username']
中的示例值吗?另外,为什么条带斜杠
?您是否在启用了magic quotes的服务器上运行?检查LDAP服务器设置,也许它需要TLS?我已经整理好了。原来我的用户名中需要@mydomain.com。谢谢你的回复。
<?php
$ldap_hostname = "my openldap IP";
$ldap_port = "389";
$ldap_dn = "cn=Manager,dc=mydomain,dc=com";
$ldap_search = "dc=mydomain,dc=com";
$ldap_password ="my password";
?>