我在Debian 8上运行PHP 5.6.17和Apache 2.4.10。
我想用Windows用户名填充PHP变量$_SERVER['REMOTE_USER']
,如果用户名在我的数据库中,则登录用户。我对此方法所涉及的安全风险感到满意,因为这只会暴露在本地网络上。
这是我在Apache vhost定义中所做的:
<LocationMatch "/login/ssologin">
PerlAuthenHandler Apache2::AuthenNTLM
AuthBasicAuthoritative on
AuthType ntlm
AuthName "hello"
Require valid-user
PerlAddVar ntdomain "my.local"
PerlSetVar defaultdomain my.local
PerlSetVar splitdomainprefix 1
PerlSetVar ntlmauthoritative off
PerlSetVar ntlmdebug 1
</LocationMatch>
我将URL放入Internet Explorer上的受信任站点,但仍然提示我进行基本身份验证。
我错过了什么?
我唯一的目标是获取Windows会话的用户名。还有另一种更简单的方法吗?
答案 0 :(得分:5)
首先,您的ntdomain
不完整。 According to documentation,变量设置如下:
PerlAddVar ntdomain "my.local PDC_NAME BDC_NAME"
如果没有域控制器进行身份验证,则永远无法满足valid-user
要求。
其次,Apache2 :: AuthenNTLM不支持NTLM版本2身份验证。
自Windows Vista和Server 2008以来,NTLM版本2已被专门使用。如果服务器不支持版本2,则以前版本的Windows将回退到版本1.虽然您可以修改安全策略以恢复旧行为,但这些版本为very dangerous。
如this answer中所述,a Python module处理NTLM版本2身份验证。显然这需要安装mod_python
,但配置起来相当简单。
最后,配置自动登录需要more than adding it to the Trusted Sites list。您应将其置于Intranet区域,并确保为此区域启用自动登录(例如,中低安全性设置。)