【发布时间】:2011-03-17 17:58:44
【问题描述】:
我的公司销售作为设备部署的基于 LAMP(其中 P = Perl,而不是 PHP)的应用程序。一位客户试图将他们的 SiteMinder SSO 与我们的应用程序集成,这样我们的设备就位于运行 SiteMinder Apache 插件的代理后面,该插件充当网守。对于我们的应用程序通过 SSO 对用户进行身份验证,我们希望看到包含 SSO cookie(在本例中为 SMSESSION)和包含用户名的自定义 HTTP 标头变量的 HTTP 请求。
但是,当我们的 Apache 服务器从 SSO 代理接收 HTTP 请求时,所有自定义 HTTP 似乎都已被剥离,尽管 cookie 存在。我已经使用以下代码检测了 Perl 代码以将标头写入日志文件:
my $q = new CGI;
...
my %headers = map { $_ => $q->http($_) } $q->http();
my $headerDump = "Got the following headers:\n";
for my $header ( keys %headers ) {
$headerDump = $headerDump . "$header: $headers{$header}\n";
}
kLogApacheError("info", $headerDump);
...这是我得到的输出(为了保密,稍作编辑):
[Wed Mar 16 23:47:31 UTC 2011] [info] Got the following headers:
HTTP_COOKIE: s_vi=[CS]v1|26AE2FFD851D091F-4000012E400035C5[CE]; s_nr=1297899843493; [snip]
HTTP_ACCEPT_LANGUAGE: en-US,en;q=0.8
HTTP_ACCEPT_ENCODING: gzip,deflate,sdch
HTTP_CONNECTION: keep-alive
HTTP_ACCEPT: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
HTTP_ACCEPT_CHARSET: ISO-8859-1,utf-8;q=0.7,*;q=0.3
HTTP_USER_AGENT: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.107 Safari/534.13
HTTP_HOST: [redacted].com
IOW,我期望的客户 HTTP 标头丢失了。当我们将流量从代理重定向到不同的 Apache 服务器(即不是我们的设备)时,所有 20 多个自定义标头都会按预期显示。这强烈表明是我们的 Apache 服务器在剥离标头。
我们从未在其他部署中遇到过这样的问题,即使使用这种特殊的 SSO 解决方案也是如此。我意识到这与本网站上的另一个问题(Server removes custom HTTP header fields)类似,但那里的建议(例如运行 mod_security 引起的问题)不适用。
我们的服务器可能会剥离 HTTP 标头是否还有其他原因?还是可能有其他事情发生?
感谢您的帮助!
马特
【问题讨论】:
-
看来你在正确的轨道上:你的 Apache 吃掉了那些自定义的头文件。在您的问题中,我没有看到任何提示,您的 Apache 是如何配置的。你不能只比较这两个 Apache confs 吗?
-
感谢您的反馈。我们的客户是一家大型银行,因此很遗憾我们无法轻松访问他们的环境。
标签: perl apache http-headers cgi single-sign-on