PHP 应用程序中的 SSO 使用独立于 Web 服务器的 AD 凭据

问题描述 投票:0回答:2

我有一个在 Linux 服务器上使用 Nginx 运行的 PHP 应用程序,它使用 LDAP 与我的 Active Directory 成功集成。

在当前场景中,用户可以为应用程序创建新的登录名或使用其 Windows 凭据登录到应用程序。

现在,我正在尝试实现完整的单点登录 (SSO),并且在域中的 Windows 计算机中使用其凭据登录的用户将能够打开登录的应用程序,而无需再次使用凭据。

对此进行了一些研究,由于我的 Linux 服务器不在同一域中,因此最好的选择是使用 NTLM(旧且不安全)、Kerberos 协议Negotiate 协议(将为每个请求在 NTLM 和 Kerberos 之间进行选择) ),具体取决于 Windows 版本以及域控制器中实现的内容。

互联网上有很多教程,还有一些关于该主题的goodthreads。另一个链接很好地概述了使用 Apache 作为 Web 服务器的选项(对于 Kerberos 选项,我找到了一个 Nginx 端口,所以这不是主要问题)。

好吧,我使用这些方法创建了一些测试应用程序(包括浏览器端中的所有更改,仅限于 Firefox),但所有这些都依赖于 Web 服务器(Apache、Nginx 甚至 IIS)。由于我的应用程序已经通过 LDAP 与 AD 完全集成,因此我对一些独立于 Web 服务器的解决方案感兴趣。有没有办法“绕过”Web 服务器中的身份验证并直接在我的 PHP 代码上获取有关登录用户的信息(客户端(Firefox)到服务器(PHP))?

我目前最好的猜测是Kerberos的某种“纯”PHP实现,需要PECL模块或NTLM,这是不安全的,并且仍然在第一个请求中要求用户凭据。

我知道这也许是不可能的,但我请求它是为了防止我在这项研究中遗漏了一些重要信息。是否可以直接在 PHP 中获取 Windows 用户信息?

php active-directory kerberos ntlm domaincontroller
2个回答
1
投票

如果您不坚持使用 nginx,请使用带有

mod_auth_gssapi
的 Apache Web Server 2.4,这是由知道自己做什么的人编写的很棒的高质量代码。我多年来一直在为我的 PHP 东西做这件事。


0
投票

简单SAMLphp

https://simplesamlphp.org/

SimpleSAMLphp 是一个用本机 PHP 编写的应用程序,用于处理身份验证。 SimpleSAMLphp 的主要重点是提供支持:

SAML 2.0 作为服务提供商 (SP) SAML 2.0 作为身份提供商 (IdP) 但是,它还支持许多其他身份协议和框架,例如 CAS、OpenID Connect、WS-Federation 和 OAuth,并且易于扩展,因此您可以根据需要开发自己的模块。

社区主导的项目拥有庞大的用户群、乐于助人的用户社区和多元化的外部贡献者。

© www.soinside.com 2019 - 2024. All rights reserved.