php - NTLM Auth 不提示需要有效用户和 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 响应。如果站点受信任,浏览器将自动发送当前用户的凭据。如果不是,浏览器会提示输入凭据。没有办法改变这种行为。
但是您可以稍微重构您的网站。我在另一个答案中描述了如何在后台尝试 Windows 身份验证并回退到表单身份验证。这个答案是特定于 ASP.NET 的,但同样的事情也可以用 PHP 和 Apache 来完成(尽管我不能确切地告诉你如何去做)。
基本思想是:
- 您网站的主要身份验证机制是表单身份验证。
- 在您的登录页面上,首先隐藏页面上的所有内容。
- 在您的登录页面上,向为 Windows 身份验证配置的 URL 发出 AJAX 请求。
- 在服务器端,如果对该 URL 的身份验证成功,您将执行与成功的表单登录相同的操作(通常设置 cookie)。
- 在您的登录页面上,如果该 AJAX 请求成功,您将用户转发到他们想要的页面。
- 如果 AJAX 请求失败,请在登录页面上显示所有内容,然后他们可以在那里输入用户名和密码。
推荐阅读
- sql-server - 适用于 IaaS 的 Azure SQL 备份
- linux - 使用 pulseaudio 作为系统单元捕获麦克风输入失败
- webpack - Babel 7 - 装饰器转换不适用于 babel-loader
- ios - popViewController(animated: true) 动画运行缓慢
- xml - XSD枚举加空字符串?
- oauth-2.0 - google home (oauth2) 上的身份验证失败
- java - Cordova:下载文件,其中 URL 采用请求参数
- excel - 网页抓取到 Excel
- java - 如何在屏幕打开且设备准备解锁时显示图像
- assembly - X8086 汇编语言中的回文与否