我正在尝试做的事情:
在我们公司的 Intranet 上创建一个主页,该主页会自动获取查看该页面的人的登录 Windows 用户名,而不会在页面加载时提示该人输入这些凭据。
目前,我只希望它获取本地用户名,因为我们的 IT 人员需要一段时间才能设置域。例如,现在我希望它在没有任何提示的情况下捕获“(PC-Name)\windows.user.name”。
环境:
Windows 7 x64 上的 Apache 2.2.21(一旦投入生产,将在 CentOS 上)。
PHP 5.3.8 (VC9-ZTS)。
Internet Explorer 9.0.8x 和 Firefox 6.0.2(稍后会担心 Chrome)。
当前的测试页面只是一个调用 print_r( $_SERVER ) 的 PHP 脚本。
为简单起见,我正在测试的目录不是 VirtualHost。
到目前为止我采取的步骤:
从 SourceForge 下载 mod_sspi_1.0.4-2.2.2 并将 mod_auth_sspi.so 解压缩到 Apache 模块目录。
添加了模块声明:
LoadModule sspi_auth_module 模块/mod_auth_sspi.so
添加目录定义:
AllowOverride 无 选项 无 订单允许,拒绝 全部允许
AuthName "My Intranet" AuthType SSPI SSPIAuth On SSPIAuthoritative Off require valid-user
通过转到 about:config 并将 network.automatic-ntlm-auth.trusted-uris 设置为 PHP 脚本的绝对 URL 路径,在 Firefox 中启用集成身份验证,然后重新启动 Firefox。
我还没有在 IE 中完成相同的步骤,但是一旦我让 Firefox 正常工作,我就会这样做,因为这是我们内部支持的主要浏览器。
重新启动 Apache 并尝试加载测试 PHP 脚本。
结果:
- 在 IE 和 Firefox 中,页面加载前都会提示我输入用户名和密码。我不想要那个提示。我希望在没有提示的情况下自动检测用户名。
到目前为止的故障排除:
我尝试过各种 SSPI 选项,例如权威开/关等等。没有效果。
如果我删除“需要有效用户”,则不再出现提示,但是用户名也没有传递(它不是 NULL;只是没有在数组期间设置)。
如果我在提示符上点击“取消”,我会得到标准的“需要身份验证”页面。
如果我输入了无效的用户名,或者输入了正确的用户名但密码错误,页面将加载但用户名将是“(PC-Name)\Guest”。
如果我输入正确的用户名/密码,则会显示用户名而不是访客。
在 IE 或 Firefox 中输入用户名/密码后,浏览器会记住后续页面加载的用户名,直到我清除存储的密码缓存或重新启动浏览器。
在过去的 3 个小时里,我一直在谷歌搜索和随机猜测。零成功。我发现一些孤立的论坛帖子有人问这个问题,但他们要么没有得到回答,要么提供了我已经尝试过但没有成功的解决方案。
同样,我想要的是在没有任何提示的情况下加载页面,并在 $_SERVER 数组输出中显示当前登录的 Windows 用户名。
据我所知,这可能是:Windows 配置问题、Apache 配置问题或浏览器配置问题。除此之外,我的想法很新鲜。
如果您能提供任何帮助,我将不胜感激。谢谢!
——克里斯