草庐IT

php - 在 mod_auth_sspi_1.0.4-2.2.2 中禁用登录提示

coder 2023-11-10 原文

我正在尝试做的事情:

  • 在我们公司的 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 modules/mod_auth_sspi.so

  • 添加了目录定义:

    允许覆盖无 选项无 订单允许、拒绝 允许所有

    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 选项,例如授权开/关等等。没有影响。

  • 如果我删除“require valid-user”,则不再出现提示,但用户名也未传递(它不是 NULL;只是未在数组句点中设置)。

  • 如果我在提示中点击“取消”,我会看到标准的“需要身份验证”页面。

  • 如果我输入了无效的用户名,或者输入了正确的用户名但密码错误,页面将加载,但用户名将是“(PC-Name)\Guest”。

  • 如果我输入了正确的用户名/密码,则会显示用户名而不是访客。

  • 我在 IE 或 Firefox 中输入用户名/密码后,浏览器会在后续页面加载时记住该用户名,直到我清除存储的密码缓存或重新启动浏览器。

  • 过去 3 个小时左右,我一直在谷歌搜索和随机猜测。零成功。我发现了一些独立的论坛帖子,有人在问这个问题,但他们要么没有得到回答,要么提供了我已经尝试过但没有成功的解决方案。

同样,我想要的是在没有任何提示的情况下加载页面,并在 $_SERVER 数组输出中显示当前登录的 Windows 用户名。

据我所知,这可能是:Windows 配置问题、Apache 配置问题或浏览器配置问题。除此之外,我完全没有想法。

如果您能提供任何帮助,我将不胜感激。谢谢!

--克里斯

最佳答案

花了几天时间,但我最终自己弄明白了。显然,描述 Firefox about:config 设置的各种文档和教程都是错误的。他们声称必须包括完整的 URI,包括协议(protocol)前缀。事实证明,事实恰恰相反。

作为在黑暗中随机拍摄的照片,我尝试将其设置为“本地主机”(测试服务器运行所在的域)。瞧!修好了!另一方面,“http://localhost”导致它崩溃。

一旦我让它在 Firefox 中运行,并验证了服务器端配置是正确的,将它应用到 IE 和 Chrome 中就轻而易举了。对于 IE,我只是将“http://localhost”(在这种情况下,您需要协议(protocol)前缀)添加到“Intranet”区域。由于 Chrome 使用与 IE 相同的网络设置,因此该步骤使其适用于两种浏览器。

就服务器端配置而言,看起来我从一开始就做对了。不过,我能够稍微简化它,所以目录 block 中您真正需要的是:

AuthName "Whatever you want to call your intranet"
AuthType SSPI
SSPIAuth On

require valid-user

使用此设置,如果您指向执行 print_r( $_SERVER ) 的 PHP 脚本,输出将包含如下内容:

[REMOTE_USER] => dev-kdc-pc01\kris.craig
[AUTH_TYPE] => NTLM
[PHP_AUTH_USER] => dev-kdc-pc01\kris.craig

如果你想摆脱域部分(即“dev-kdc-pc01\”),你可以在 PHP 中解析它或将此行添加到 httpd.conf 中目录 block 中的 SSPI 内容上面提到:

SSPIOmitDomain On

请注意,我只在 Apache 网络服务器在本地主机上运行的 Windows 系统上对此进行了测试。我还没有在 Apache 服务器在 Linux 上运行的情况下对其进行测试,尽管这不会对结果产生任何影响,因为服务器只是接受浏览器发送的任何内容。这还要求客户端运行 Windows 或其他一些 SSPI 兼容环境。我还没有确定如何为我们使用 Mac 的员工提供这项服务。

另请注意,我已在当前​​配置域的网络上成功测试了此功能。根据其他地方发表的文章,该行为在作为域成员的工作站上应该是相同的。

希望对您有所帮助!谢谢!

关于php - 在 mod_auth_sspi_1.0.4-2.2.2 中禁用登录提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8394148/

有关php - 在 mod_auth_sspi_1.0.4-2.2.2 中禁用登录提示的更多相关文章

  1. python - 是否可以使用 Ruby 或 Python 禁用 anchor /引用来发出有效的 YAML? - 2

    是否可以在PyYAML或Ruby的Psych引擎中禁用创建anchor和引用(并有效地显式列出冗余数据)?也许我在网上搜索时遗漏了一些东西,但在Psych中似乎没有太多可用的选项,而且我也无法确定PyYAML是否允许这样做.基本原理是我必须序列化一些数据并将其以可读的形式传递给一个不是真正的技术同事进行手动验证。有些数据是多余的,但我需要以最明确的方式列出它们以提高可读性(anchor和引用是提高效率的好概念,但不是人类可读性)。Ruby和Python是我选择的工具,但如果有其他一些相当简单的方法来“展开”YAML文档,它可能就可以了。 最佳答案

  2. ruby - 是否可以将 IRB 提示配置为动态更改? - 2

    我想在IRB中浏览文件系统并让提示更改以反射(reflect)当前工作目录,但我不知道如何在每个命令后进行提示更新。最终,我想在日常工作中更多地使用IRB,让bash溜走。我在我的.irbrc中试过这个:require'fileutils'includeFileUtilsIRB.conf[:PROMPT][:CUSTOM]={:PROMPT_N=>"\e[1m:\e[m",:PROMPT_I=>"\e[1m#{pwd}>\e[m",:PROMPT_S=>"FOO",:PROMPT_C=>"\e[1m#{pwd}>\e[m",:RETURN=>""}IRB.conf[:PROMPT_MO

  3. ruby-on-rails - 禁用设备的 :confirmable on-the-fly to batch-generate users - 2

    Devise是一个Ruby库,它为我提供了这个User类:classUser当写入:confirmable时,注册时会发送一封确认邮件。上周我不得不批量创建300个用户,所以我在恢复之前注释掉了:confirmable几分钟。现在我正在为用户批量创建创建一个UI,因此我需要即时添加/删除:confirmable。(我也可以直接修改Devise的源码,但我宁愿不去调和它)问题:如何即时添加/删除:confirmable? 最佳答案 WayneConrad的解决方案:user=User.newuser.skip_confirmation

  4. ruby - 使用 Ruby 和 Mechanize 登录网站 - 2

    我需要从站点抓取数据,但它需要我先登录。我一直在使用hpricot成功地抓取其他网站,但我是使用mechanize的新手,我真的对如何使用它感到困惑。我看到这个例子经常被引用:require'rubygems'require'mechanize'a=Mechanize.newa.get('http://rubyforge.org/')do|page|#Clicktheloginlinklogin_page=a.click(page.link_with(:text=>/LogIn/))#Submittheloginformmy_page=login_page.form_with(:act

  5. ruby-on-rails - 如何在 Rails 3 中禁用 XML 解析 - 2

    我想禁用HTTP参数的自动XML解析。但我发现命令仅适用于Rails2.x,它们都不适用于3.0:config.action_controller.param_parsers.deleteMime::XML(application.rb)ActionController::Base.param_parsers.deleteMime::XMLRails3.0中的等价物是什么? 最佳答案 根据CVE-2013-0156的最新安全公告你可以将它用于Rails3.0。3.1和3.2ActionDispatch::ParamsParser::

  6. ruby - 在 StockChart (highchart) 中以编程方式显示柱形图的工具提示 - 2

    我有一个Highstock图表(带有标记和阴影的线条),并且想以编程方式显示一个highstock工具提示,例如,当我选择某个表上的一行(包含图表数据)我想显示相应的highstock工具提示。这可能吗? 最佳答案 股票图表thissolution不起作用:在thisexample你必须更换这个:chart.tooltip.refresh(chart.series[0].data[i]);为此:chart.tooltip.refresh([chart.series[0].points[i]]);解决方案可用here.

  7. ruby-on-rails - 这个 C 和 PHP 程序员如何学习 Ruby 和 Rails? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我来自C、php和bash背景,很容易学习,因为它们都有相同的C结构,我可以将其与我已经知道的联系起来。然后2年前我学了Python并且学得很好,Python对我来说比Ruby更容易学。然后从去年开始,我一直在尝试学习Ruby,然后是Rails,我承认,直到现在我还是学不会,讽刺的是那些打着简单易学的烙印,但是对于我这样一个老练的程序员来说,我只是无法将它

  8. ruby-on-rails - 使用用户或管理员模型和 Basecamp 样式子域设计登录 - 2

    我为Devise用户和管理员提供了不同的模型。我也在使用Basecamp风格的子域。除了我需要能够以用户或管理员身份进行身份验证的一些Controller和操作外,一切都运行良好。目前我有authenticate_user!在我的application_controller.rb中设置,对于那些只有管理员才能访问的Controller和操作,我使用skip_before_filter跳过它。不幸的是,我不能简单地指定每个Controller的身份验证要求,因为我仍然需要一些Controller和操作才能被用户或管理员访问。我尝试了一些方法都无济于事。看来,如果我移动authentica

  9. ruby - 如何使用 omniauth/oauth 对每秒登录数进行基准测试? ( ruby +rspec) - 2

    我想用一个(自己的)omniauth提供商来衡量每秒可以登录多少次。我需要了解此omniauth/oauth请求的性能如何,以及此身份验证是否具有可扩展性?到目前为止我得到了什么:defperformance_auth(user_count=10)bm=Benchmark.realtimedouser_count.timesdo|n|forkdoclick_on'Logout'omniauth_config_mock(:provider=>"foo",:uid=>n,:email=>"foo#{n}@example.net")visit"/account/auth/foo/"enden

  10. ruby - 从 gemspec/Gemfile 禁用 rdoc 和 ri - 2

    我有一个客户端gem,我将通过ruby​​gems分发业务客户端。Gem客户端有cca​​。十几个gem依赖项,当它被安装时,由于为每个gem生成rdoc和ri,安装它需要很长时间。客户是商业用户,他们对rdoc/ri没有用处,我正在寻找一种通过.gemspec或Gemfile禁用它的方法。我熟悉利用系统文件.gemrc禁用rdoc/ri的解决方案。但这是NotAcceptable解决方案,因为我希望我的安装像键入一样简单:gem安装foo 最佳答案 你可以使用post-installmessage解释他们可以通过运行@shime建

随机推荐