SSO - 使用Apache获取AD用户名

时间:2016-03-17 16:20:08

标签: php apache ntlm mod-perl

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

1 个答案:

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