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

时间:2019-05-15 15:01:55

标签: php active-directory kerberos ntlm domaincontroller

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

在当前情况下,用户可以为该应用创建新的登录名,或使用其Windows凭据登录该应用。

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

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

互联网上有很多教程,SO中的主题也有good threads。另一个link很好地概述了使用Apache作为Web服务器的选项(对于Kerberos选项,我找到了Nginx port,所以这不是主要问题)。

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

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

我知道这可能是不可能的,但是我想问的是我错过了这项研究中的一些重要信息的情况。是否可以直接通过PHP获取Windows用户信息?

1 个答案:

答案 0 :(得分:1)

如果您不坚持使用nginx和mod_auth_gssapi一起使用Apache Web Server 2.4,那么这是由知道自己的工作的人编写的高质量的高质量代码。多年来,我一直在为PHP做这些事情。