1

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

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

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

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

4

3 回答 3

2

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

基本 LDAP 查询

    <?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";
}
?>
于 2013-03-04T12:54:55.687 回答
0

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

于 2013-03-04T12:52:24.893 回答
0

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

Keep in mind though, IPs can be spoofed and can change (sometimes frequently, sometimes rarely), so it's not a very secure or reliable way to log someone in automatically. However, depending on the nature of your application, it could be sufficient. Particularly if you're only using it on an intranet (in which case you could set static ips, if needed).

于 2013-03-04T13:10:05.563 回答