Bas*_*der 11 php apache ntlm mod-perl
我在Debian 8上运行PHP 5.6.17和Apache 2.4.10.
我想$_SERVER['REMOTE_USER']用Windows用户名填充PHP变量,如果用户名在我的数据库中,则登录用户.我对此方法涉及的安全风险感到满意,因为这只会暴露在本地网络上.
这是我在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>
Run Code Online (Sandbox Code Playgroud)
我将URL放入Internet Explorer中的受信任站点,但仍然提示我进行基本身份验证.
我错过了什么?
我唯一的目标是获取Windows会话的用户名.还有另一种更简单的方法吗?
首先,你ntdomain的不完整.根据文档,变量设置如下:
PerlAddVar ntdomain "my.local PDC_NAME BDC_NAME"
Run Code Online (Sandbox Code Playgroud)
如果没有域控制器进行身份验证,valid-user则永远无法满足要求.
其次,Apache2 :: AuthenNTLM不支持NTLM版本2身份验证.
自Windows Vista和Server 2008以来,NTLM版本2已被专门使用.如果服务器不支持版本2,则以前版本的Windows将回退到版本1.虽然您可以修改安全策略以恢复旧行为,但这些都非常危险.
如本回答所述,有一个处理NTLM版本2身份验证的Python模块.显然这需要安装,mod_python但配置起来相当简单.
最后,配置自动登录需要的不仅仅是将其添加到"可信站点"列表.您应该将其放在Intranet区域中,并确保为此区域启用自动登录(例如,中低安全性设置.)