SSO - 使用Apache获取AD用户名

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会话的用户名.还有另一种更简单的方法吗?

mik*_*n32 5

首先,你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区域中,并确保为此区域启用自动登录(例如,中低安全性设置.)