在 Windows 域中实现 Apache 2.4 的 SSO 的最佳方法是什么?

在 Windows 域中实现 Apache 2.4 的 SSO 的最佳方法是什么?

我想在 PHP 8 内联网应用上实现 SSO 身份验证(无需登录/密码提示),该应用在 Windows 版 Apache 2.4 x64 下运行。我的公司有 Active Directory / LDAP / Windows 环境。

我设法通过 Apache 做到这一点修改模型适用于 Windows 的 NTLM 模块)以及通过 SSPI 模块(mod_authnz_sspi,以前可在 ApacheHaus 上使用)。然后我能够毫无问题地$_SERVER ['REMOTE_USER']获取变量。$_SERVER['PHP_AUTH_USER']

与此同时,我读到 NTLM 已被淘汰,因此想找到更合适的技术。SSPI 模块确实似乎依赖于(仅?)NTLM。

您能否告诉我是否可以使用协商模式,该模式本身依赖于我正在使用的 SSPI 模块的 LDAP 或 Kerberos 身份验证?遗憾的是没有可用的文档。

这种透明的身份验证(无需输入凭证)最终能否通过 Apache 原生模块实现?修改 LDAP 服务器

我看过mod_auth_kerb但没有适用于 Windows 的模块,并且全局搜索应用程序编程接口似乎也不适用于 Windows。

答案1

SSPI 是 Kerberos 和 NTLM 的通用 Windows 接口;它是 GSSAPI 的 Microsoft 等效版本。使用 SSPI 的模块应该接受这两种机制 - 尽管由客户端决定在看到时实际提供什么WWW-Authenticate: Negotiate

请记住,Kerberos 要求服务器具有自己的 Kerberos 身份(服务主体)–并且 HTTP 协商身份验证没有任何方式让服务器预先表明“我只接受 Kerberos”–因此无法获取服务 Kerberos 票证的 Windows 客户端将自动回退到发送 NTLM 令牌。

所以我敢打赌,你的结论“SSPI 模块确实似乎依赖于(仅?)NTLM”是基于不完整的配置,无论如何你都应该使用 SSPI 模块。

同时,LDAP不是SSO 机制。它是用户帐户数据库,它也恰好具有验证原始密码的能力,但它没有像 Kerberos 或 OAuth 那样的任何 SSO 机制——您可以使用它进行授权,但尝试使用它进行身份验证将不可避免地导致密码提示。


我通常根本不会在 Windows 上托管 Apache(这样做了,吸取了教训)。

相关内容