NTLM Auth 没有提示要求有效用户和 PHP

NTLM Auth without prompt for require valid-user and PHP

如果找不到有效用户,我想重定向到不显示 htaccess 提示的登录页面

我有一个有效的 htaccess 授权

AuthName "My name"
NTLMBasicRealm "DOM"
NTLMAuth on
NegotiateAuth off
NTLMAuthHelper "/usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp"
NegotiateAuthHelper "/usr/bin/ntlm_auth --helper-protocol=gss-spnego"
NTLMBasicAuthoritative on
AuthType NTLM
AuthType Negotiate
Require valid-user 

ErrorDocument 401 /index.php

只要找到有效用户,就会将 Windows 名称设置为 $_SERVER['REMOTE_USER']。 如果没有弹出 htaccess 提示,您需要手动取消它才能重定向

如果我删除 Require valid-user,$_SERVER['REMOTE_USER'] 为空。

有没有一种方法可以对用户进行身份验证,但如果没有自动找到重定向而不提示?

Windows 身份验证的第一步是向浏览器返回 HTTP 401 响应。如果站点受信任,浏览器将自动发送当前用户的凭据。如果不是,浏览器会提示输入凭据。没有办法改变这种行为。

但是您可以稍微重构一下您的网站。我在 another answer 中描述了如何在后台尝试 Windows 身份验证并回退到表单身份验证。该答案特定于 ASP.NET,但同样的事情也可以用 PHP 和 Apache 来完成(虽然我不能告诉你具体怎么做)。

基本思路是:

  1. 您网站的主要身份验证机制是表单身份验证。
  2. 在您的登录页面上,首先隐藏页面上的所有内容。
  3. 在您的登录页面上,向配置为 Windows 身份验证的 URL 发出 AJAX 请求。
  4. 在服务器端,如果 URL 的身份验证成功,您将执行与成功登录表单相同的操作(通常是设置 cookie)。
  5. 在您的登录页面上,如果 AJAX 请求成功,您会将用户转到他们想要的页面。
  6. 如果 AJAX 请求失败,请在登录页面上显示所有内容,他们可以在那里输入用户名和密码。