【问题标题】:SSO - Get the AD Username with ApacheSSO - 使用 Apache 获取 AD 用户名
【发布时间】:2016-03-17 16:20:08
【问题描述】:

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

【问题讨论】:

标签: php apache ntlm mod-perl


【解决方案1】:

首先,您的ntdomain 不完整。 According to documentation,变量是这样设置的:

PerlAddVar ntdomain "my.local PDC_NAME BDC_NAME"

如果没有域控制器进行身份验证,则永远无法满足valid-user 的要求。

其次,Apache2::AuthenNTLM 不支持 NTLM version 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区域,并确保该区域启用了自动登录(例如中低安全设置。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-29
    • 1970-01-01
    • 1970-01-01
    • 2015-03-17
    相关资源
    最近更新 更多