登录页面 - AD - 身份验证

时间:2017-05-14 07:20:36

标签: php mysql database active-directory

我需要创建一个登录页面,该页面应该使用我们的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 } ?> 

1 个答案:

答案 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");