如何从php脚本获取Windows登录ID?

时间:2013-03-04 12:45:47

标签: php apache

我有一个PHP Web应用程序。当用户打开它时,我需要获取Windows系统的登录ID。我不再对用户进行身份验证。

我听说过Active Directory,但我不想再次对用户进行身份验证。打开我的Web应用程序时,应自动捕获用户名。

如何在PHP脚本中获取登录ID?

我还听说过为mod_ntlm环境和REMOTE_USER变量等配置Apache服务器。我不知道所有这些。任何人都可以非常简单地说明我可以继续配置所有这些吗?

3 个答案:

答案 0 :(得分:2)

如果仅在内部LAN上运行,并且网络上的所有Windows机器都针对SBS或完全成熟的Windows Active Directory进行身份验证,则可以使用LDAP查询查询浏览页面的用户的登录信息。我多年前做过内联网。它非常可靠,但仅适用于针对Windows域进行身份验证的内部用户。

BASIC LDAP QUERY

    <?php

    // basic sequence with LDAP is connect, bind, search, interpret search result,
    // close connection

    $ds=ldap_connect("192.168.0.1");        // ! Your LDAP/Active Direcotry Server !
    echo "Connection: ".$ds."";

    if ($ds) {
            echo "Binding ..";
            $r=ldap_bind($ds);        // this is an "anonymous" bind, typically read-only access
            echo "Bind result is ".$r."";
            echo "Searching for (sn=A*) .."; // this example searches surname entry for all surnames starting with A
            $sr=ldap_search($ds,"o=Organisation Name, c=UK", "sn=A*"); // ! must use real base dn here !
            echo "Search result is ".$sr."";
            echo "Number of entires returned is ".ldap_count_entries($ds,$sr)."";
            echo "Getting entries ...";
            $info = ldap_get_entries($ds, $sr);
            echo "Data for ".$info["count"]." items returned:";

            for ($i=0; $i<$info["count"]; $i++) {
               echo "dn is: ". $info[$i]["dn"] ."";
               echo "first cn entry is: ". $info[$i]["cn"][0] ."";
               echo "first email entry is: ". $info[$i]["mail"][0] ."";
            }
    //now  close connection
    ldap_close($ds);
} else {
    echo "Unable to connect to LDAP server";
}
?>

答案 1 :(得分:0)

我非常怀疑任何网络应用程序是否可以获得Windows登录ID - 这将是一个非常严重的安全问题。

答案 2 :(得分:0)

据我所知,您可以做的最好的事情是存储用户的IP并使用它来自动登录(在他们进行一次身份验证后)。您可以从$ _SERVER ['REMOTE_ADDR']获取用户的IP。

请记住,IP可能会被欺骗并且可以更改(有时经常,有时甚至很少),因此这不是一种非常安全或可靠的方式来自动记录某人。但是,根据应用程序的性质,它可能就足够了。特别是如果您只在Intranet上使用它(在这种情况下,您可以根据需要设置静态ips)。