PHP - 使用 LDAP 身份验证创建登录页面
PHP - Create login page with LDAP authentication
我正在尝试使用 LDAP 身份验证创建登录页面。
我创建了以下代码:
<?php
$query = 'CN=AD Username, OU=Users,OU=No Policy Light,OU=IT,DC=Domain,DC=Corp';
$server = 'Domain.Corp';
$dn = 'dc=Domain, dc=com';
$conn = ldap_connect($server);
ldap_search($conn, $dn, $query);
echo "ldap error: " . ldap_error($conn);
ldap_get_option($conn, LDAP_OPT_DIAGNOSTIC_MESSAGE, $err);
echo "ldap_get_option: $err";
?>
当我查看我的网页时,出现以下错误:
"ldap error: Operations error ldap_get_option:"
我在 php ldap 手册下找到了这个连接:
https://www.php.net/manual/en/function.ldap-error.php
有人知道我的代码可能有什么问题吗?
或者如果您有更好的 ldap 身份验证解决方案 php.
提前致谢。
更新:
所以根据 'EricLavault' 评论,我必须先设置绑定:
<?php
// using ldap bind
$ldaprdn = 'AD Username'; // ldap rdn or dn
$ldappass = 'Password'; // associated password
// connect to ldap server
$ldapconn = ldap_connect("LDAP Server")
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...";
}
}
$ldaprdn = $_POST["username"];
$ldappass = $_POST["password"];
if(ldap_bind($ldapconn, $ldaprdn, $ldappass))
{
echo "bin successful!";
}
else
{
echo "invalid user/pass or other error";
}
?>
我的表单如下所示:
<html>
<head>
<style>
body
{
text-align:center;
}
form
{
margin: 0 auto; width: 500px;
}
input
{
padding: 10px; font-zie:20;
}
</style>
</head>
<body>
<h1> authentication with AD </h1>
<form action="Auth.php" method="post">
<input type="text" name="username" /><br>
<input type="text" name="password" /><br>
<input type="submit" value="Login" />
</body>
</html>
所以在进行了一些研究和一些试验和错误之后,我想出了这个解决方案,它似乎可以完美地满足我的需求。
我的表格:
<html>
<head>
<style>
body
{
text-align:center;
}
form
{
margin: 0 auto; width: 500px;
}
input
{
padding: 10px; font-zie:20;
}
</head>
</style>
<body>
<h1> authentication with AD </h1>
<form action="Auth.php" method="post">
<input type="text" name="username" /><br>
<input type="password" name="password" /><br>
<input type="submit" value="Login" />
</body>
</html>
我的授权页面:
<?php
$ldaprdn = $_POST["username"];
$ldappass = $_POST["password"];
$ldapconn = ldap_connect("ldap server name") or die("Could not connect to LDAP server.");
if ($ldapconn)
{
$ldapbind = ldap_bind($ldapconn, $ldaprdn, $ldappass);
if ($ldapbind)
{
echo "LDAP bind successful...";
}
else
{
echo "LDAP bind failed...";
}
}
$Result = ldap_search($ldapconn, "OU=IT,DC="Domain",DC=corp", "(samaccountname=$ldaprdn)", array("dn"));
$data = ldap_get_entries($ldapconn, $Result);
print_r($data);
?>
此外,根据 this answer,您 可能 需要在 ldap_connect
之后立即设置以下选项:
ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldapconn, LDAP_OPT_REFERRALS, 0);
希望这个解决方案可以帮助到有同样需求的人。
我正在尝试使用 LDAP 身份验证创建登录页面。
我创建了以下代码:
<?php
$query = 'CN=AD Username, OU=Users,OU=No Policy Light,OU=IT,DC=Domain,DC=Corp';
$server = 'Domain.Corp';
$dn = 'dc=Domain, dc=com';
$conn = ldap_connect($server);
ldap_search($conn, $dn, $query);
echo "ldap error: " . ldap_error($conn);
ldap_get_option($conn, LDAP_OPT_DIAGNOSTIC_MESSAGE, $err);
echo "ldap_get_option: $err";
?>
当我查看我的网页时,出现以下错误:
"ldap error: Operations error ldap_get_option:"
我在 php ldap 手册下找到了这个连接:
https://www.php.net/manual/en/function.ldap-error.php
有人知道我的代码可能有什么问题吗? 或者如果您有更好的 ldap 身份验证解决方案 php.
提前致谢。
更新:
所以根据 'EricLavault' 评论,我必须先设置绑定:
<?php
// using ldap bind
$ldaprdn = 'AD Username'; // ldap rdn or dn
$ldappass = 'Password'; // associated password
// connect to ldap server
$ldapconn = ldap_connect("LDAP Server")
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...";
}
}
$ldaprdn = $_POST["username"];
$ldappass = $_POST["password"];
if(ldap_bind($ldapconn, $ldaprdn, $ldappass))
{
echo "bin successful!";
}
else
{
echo "invalid user/pass or other error";
}
?>
我的表单如下所示:
<html>
<head>
<style>
body
{
text-align:center;
}
form
{
margin: 0 auto; width: 500px;
}
input
{
padding: 10px; font-zie:20;
}
</style>
</head>
<body>
<h1> authentication with AD </h1>
<form action="Auth.php" method="post">
<input type="text" name="username" /><br>
<input type="text" name="password" /><br>
<input type="submit" value="Login" />
</body>
</html>
所以在进行了一些研究和一些试验和错误之后,我想出了这个解决方案,它似乎可以完美地满足我的需求。
我的表格:
<html>
<head>
<style>
body
{
text-align:center;
}
form
{
margin: 0 auto; width: 500px;
}
input
{
padding: 10px; font-zie:20;
}
</head>
</style>
<body>
<h1> authentication with AD </h1>
<form action="Auth.php" method="post">
<input type="text" name="username" /><br>
<input type="password" name="password" /><br>
<input type="submit" value="Login" />
</body>
</html>
我的授权页面:
<?php
$ldaprdn = $_POST["username"];
$ldappass = $_POST["password"];
$ldapconn = ldap_connect("ldap server name") or die("Could not connect to LDAP server.");
if ($ldapconn)
{
$ldapbind = ldap_bind($ldapconn, $ldaprdn, $ldappass);
if ($ldapbind)
{
echo "LDAP bind successful...";
}
else
{
echo "LDAP bind failed...";
}
}
$Result = ldap_search($ldapconn, "OU=IT,DC="Domain",DC=corp", "(samaccountname=$ldaprdn)", array("dn"));
$data = ldap_get_entries($ldapconn, $Result);
print_r($data);
?>
此外,根据 this answer,您 可能 需要在 ldap_connect
之后立即设置以下选项:
ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldapconn, LDAP_OPT_REFERRALS, 0);
希望这个解决方案可以帮助到有同样需求的人。