我需要创建一个登录页面,该页面应该使用我们的Active目录详细信息进行身份验证。
我在Php中创建了一个登录页面。通常,我曾经在Xampp中存储id和密码,但是对于这种情况,我没有任何具体的想法如何验证Active目录。
我是新手。我有脚本。但它没有验证AD。
如果我想与AD连接,是否需要知道我需要的凭据是什么? 我可以简化以下程序吗? 我需要在程序中的mydomain位置编写什么? 我现在正在使用Xampp。我是否需要下载任何其他应用程序?
<?php
if(isset($_POST['username']) && isset($_POST['password'])){
$adServer = "ldap://hostname.com";
$ldap = ldap_connect($adServer);
$username = $_POST['username'];
$password = $_POST['password'];
$ldaprdn = 'mydomain' . "\\" . $username;
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0);
$bind = @ldap_bind($ldap, $ldaprdn, $password);
if ($bind) {
$filter="(sAMAccountName=$username)";
$result = ldap_search($ldap,"dc=MYDOMAIN,dc=COM",$filter);
ldap_sort($ldap,$result,"sn");
$info = ldap_get_entries($ldap, $result);
for ($i=0; $i<$info["count"]; $i++)
{
if($info['count'] > 1)
break;
echo "<p>You are accessing <strong> ". $info[$i]["sn"][0] .", " . $info[$i]["givenname"][0] ."</strong><br /> (" . $info[$i]["samaccountname"][0] .")</p>\n";
echo '<pre>';
var_dump($info);
echo '</pre>';
$userDn = $info[$i]["distinguishedname"][0];
}
@ldap_close($ldap);
} else {
$msg = "Invalid email address / password";
echo $msg;
}
}
else{
?>
<form action="#" method="POST">
<label for="username">Username: </label><input id="username" type="text" name="username" />
<label for="password">Password: </label><input id="password" type="password" name="password" /> <input type="submit" name="submit" value="Submit" />
</form>
<?php } ?>
答案 0 :(得分:0)
要使该脚本正常工作,您需要编辑一些内容:
$adServer = "ldap://fullfqdn.ofyour.server";
或(ip仅是示例)
$adServer = "ldap://192.168.1.1";
然后您必须输入您的域名。如果您的域名是example.com,则只需输入example。
$ldaprdn = 'example' . "\\" . $username;
然后,您需要了解AD的基本上下文。那只是你的域名。如果是example.com,则变成dc = example,dc = com
$result = ldap_search($ldap,"dc=example,dc=com",$filter);ldap_sort($ldap,$result,"sn");
如果它不返回任何内容,请在搜索中将“ sn”更改为“ cn”,因为可能不会填充“ sn”字段。
$result = ldap_search($ldap,"dc=example,dc=com",$filter);ldap_sort($ldap,$result,"cn");