0

我真的可以使用一些帮助来解决看似微不足道的问题。总之,我想知道在 Windows 环境中访问在 Apache 中运行的 Perl .cgi 的用户的 Window 登录 ID。

这是我的基本 Apache2 conf 添加:

---- 开始 httpd.conf -----

...

LoadModule sspi_auth_module modules/mod_auth_sspi.so
...
<IfModule mod_auth_sspi.c>
    <Location "C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin">
        AuthName "A Protected Place"
        AuthType SSPI
        SSPIAuth On
        SSPIAuthoritative On
        #SSPIBasic On
        SSPIOfferBasic On
        #SSPIDomain On
        #SSPIBasicPreferred
        #SSPIUsernameCase lower
        require valid-user
    </Location>
</IfModule>
...
<Directory "C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin">
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>
...

---- 结束 httpd.conf -----

此外,我还使用以下出色说明在我的机器上启用了 SSL:http: //tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-serversetup.html#tsvn-serversetup-apache-7

上面的站点要求加载 Apache 模块 mod_auth.so,但我在我的默认 Apache2 安装中找不到它。此外,如您所见,我已将 mod_auth_sspi-1.0.4-2.2.2 模块手动添加到我的 Apache2 环境中。

现在,当我同时尝试http://localhost/cgi-bin/test.cgihttps://localhost/cgi-bin/test.cgi时,我在 http/ 中看不到 REMOTE_USER 的任何内容环境变量。我知道 SSL 正在工作,因为 https 调用显示了大量 SSL 变量。另外,我对 SSL 没有要求,但我只使用它,因为上面的链接说它是获取 Windows 登录信息所必需的。

我真的很感激任何见解。如果有帮助,我很乐意完整分享 httpd.conf 文件。基本上,重申一下,我正在寻找的只是一种在 Windows/Apache2.2 托管环境中捕获我的 Perl .cgi 中的 Windows loginID 的方法。

非常感谢大家的帮助,

猎犬加尼

4

2 回答 2

0

这可能没有太大帮助,但我认为您不需要做任何特别的事情来获取这些信息。我正在使用 mod_auth_sspi 运行 Apache 2.2 安装,并使用 REMOTE_USER 环境变量成功获取您正在寻找的信息。(例如,当我访问其中一个页面时,REMOTE_USER 是“MYDOMAIN\oeuftete”。)

我不使用 SSPIOfferBasic 选项,这是唯一实质性的配置差异,但我认为这无关紧要。我还在指令中指定选项,而不是在单独的指令中。

我想我的意思是,根据你给出的,它应该有效。所以也许还有其他事情发生。


编辑:这是我的 httpd.conf 的基础知识。

LoadModule sspi_auth_module modules/mod_auth_sspi.so

<IfModule mime_module>
    AddHandler cgi-script .pl
</IfModule>

<IfModule alias_module>
    Alias /sotest "C:/Some/path/"
</IfModule>

<Directory "C:/Some/path">
    Options ExecCGI

    Order allow,deny
    Allow from all

    AuthName "Foo"
    AuthType SSPI
    SSPIAuth On
    SSPIAuthoritative On

    require valid-user
</Directory>

以及该目录中的简短 test.pl。

#!perl -T
#

use CGI;

my $q = CGI->new;

print $q->header;
print $q->start_html;
print $ENV{'REMOTE_USER'};
print $q->end_html;

这是转到 sotest/test.pl 的结果页面:

<!DOCTYPE html
    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
MYDOMAIN\oeuftete
</body>
</html>
于 2009-03-17T17:27:34.257 回答
-1

不是 Windows 程序员,所以我不确定 loginID 是什么,但也许 Win32::LoginName 和 Win32::LookupAccountName会有所帮助?

于 2009-03-17T03:45:57.837 回答