我已经尝试了一段时间来启动并运行 mod_auth_sspi 来帮助运行 Drupal Intranet。
Drupal LDAP 模块和 Drupal SSO 说明https://drupal.org/node/1371478已被关注。
我正在运行 Uniform Server 8.12 - 运行 apache 2.2 和 php 5.3
mod_auth_sspi 安装在模块上,并在 httpd.conf 文件中引用。
LDAP 本身可以工作,因为某人可以通过访问 /user 使用其 Active Directory 中的公司登录详细信息登录其站点。Drupal 上的测试机制还会提取相关信息,例如电子邮件等。
但不幸的是我无法让它们自动进行身份验证。
httpd.conf 文件还包含:
# Virtual hosts
Include conf/extra/httpd-vhosts.conf
# Pass NTLM authentication to Apache
LoadModule sspi_auth_module modules/mod_auth_sspi.so
<IfModule !mod_auth_sspi.c>
LoadModule sspi_auth_module modules/mod_auth_sspi.so
</IfModule>
然后 vhosts 文件包含
NameVirtualHost intranet.example.co.uk
<VirtualHost intranet.example.co.uk>
DocumentRoot "C:/UniServer2/www"
ServerName Intranet
<directory "C:/UniServer2/www">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order Allow,Deny
Allow from all
</directory>
<Location /intranet/user/login/sso>
AuthType SSPI
AuthName "Intranet"
SSPIAuth On
SSPIAuthoritative On
### The domain used to authenticate with LDAP; this should match the domain
### configured in the LDAP integration configuration within Drupal
SSPIDomain xxx.xxx.x.x
SSPIOmitDomain On
SSPIOfferBasic On
Require valid-user
#SSPIBasicPreferred On
#SSPIofferSSPI off
</Location>
</VirtualHost>
需要说明的是,intranet.example.co.uk 已被替换为公司名称 xxx.xxx.xx 是 Active Directory 的 IP。显然,我出于安全原因替换了这些位。
位置是 intranet/ 因为同一台服务器上还有另一个内部 Web 应用程序。
但是当我访问该网站时收到错误消息:
“您未通过服务器的身份验证。您可以使用以下凭据登录。”
这发生在 intranet.example.co.uk 和 intranet.example.co.uk/user/login/sso 上。
Drupal 记录了以下错误报告:
ldap_sso_user_login_sso.step1:实现:mod_auth_sspi,已启用:1,server_remote_user:,server_redirect_remote_user:,ssoRemoteUserStripDomainName:,seamlessLogin:1 ldap_sso_user_login_sso.implementation:username=,(realm=)未找到 $_SERVER['REMOTE_USER'] ldap_sso_user_login_sso.no_remote_user.seamlessLogin ldap_sso_user_login_sso.no_remote_user.drupal_goto user/login
因此,显然 Drupal 没有找到远程用户。此外,我在 cgi-bin 中运行了一个简单的 whoami.php 脚本。此脚本的代码如下:
<html>
<head>
<title>whoami at <?php $_SERVER['SERVER_NAME']; ?> </title>
</head>
<body style='font-family:Verdana;font-size:-1'>
<?php
$cred = explode('\\',$_SERVER['REMOTE_USER']);
if (count($cred) == 1) array_unshift($cred, "(no domain info - perhaps SSPIOmitDomain is On)");
list($domain, $user) = $cred;
echo "You appear to be user <B>$user</B><BR/>";
echo "logged into the Windows NT domain <B>$domain</B>";
?>
</body>
</html>
这产生了“您似乎是用户”而没有后续文本并且“登录到 Windows NT 域(没有域信息 - 也许 SSPIOmitDomain 已打开)”,表明服务器也没有接收远程用户。
我没有对服务器进行任何特定的奇怪改动,因此我假设我遇到的问题一定是其他使用 mod_auth_sspi 的人遇到的问题。
虽然我的知识还不足以说明一切,但可能有几件事?
我的服务器上没有 Tomcat。在 Apache wiki (http://wiki.apache.org/httpd/ModAuthSSPI) 它说 mod_auth_sspi 的一个常见问题是 mod.jk 配置不正确。Mod.jk 似乎是一个与 Tomcat 相关的文件 - 但是我还没有看到 Tomcat 被列为 mod_auth_sspi 的要求?
与 htaccess 有关?我见过有人提到 mod_auth_sspi 和 htaccess,但没有具体说明。然而,htaccess 是唯一一个我对服务器做了一些不太寻常的事情的地方,因为它已配置为仅允许与组织具有相同 IP 地址的人访问该网站(换句话说,只有办公室里的人可以使用它,不能从外部访问它)。
我似乎在兜圈子,所以如果能提供任何建议或步骤来调试这个问题,我将不胜感激。
谢谢。