从 Windows 工作站到在不属于同一域的 Linux 服务器上运行的 PHP 脚本的单点登录


Single-Sign-On from Windows Workstation to PHP script running on Linux server that is not part of the same domain

编辑:经过今天早上的进一步研究,我试图使我的帖子更具体:

我在公司数据中心的Web服务器上运行了一个php脚本。我们的客户需要使用单点登录从其用户的 Windows 工作站访问该脚本。PHP 服务器无权访问 Windows 用户登录到的域。

有没有办法让用户打开Internet Explorer(或类似),转到我正在开发的网站,网站"知道"他们的用户名?该站点还需要拒绝不属于客户端域的任何人的访问。

所以需要明确的是,我遇到的主要问题是运行 php 脚本的服务器不是访问它的用户所在的域的一部分。

旁注:如果真正的SSO是不可能的,并且用户必须再次重新输入他们的用户名和密码,那没关系,但我想这意味着身份验证是由php脚本完成的,这是不可能的,因为它无法访问客户端AD服务器。

谢谢:)

原文:

就在一些链接或一般信息之后。我正在 example1.com 上构建一个基于 php 的网站,但要访问它,用户需要根据 example2.local 上的活动目录进行身份验证。例如 example2.local 的域控制器在互联网上无法访问。用户将在 example2.local 域中登录到 Windows 工作站,并具有互联网可访问性。

有什么方法可以工作吗?我被告知要研究"单点登录",但到目前为止我发现的所有内容都表明广告域应该 example2.com(而不是 .local)。这里的一位同事向我保证,域控制器通常无法访问更广泛的互联网。那么这通常是怎么做到的呢?

此外,客户也强调了安全性的必要性。

谢谢

编辑:在阅读了更多关于SSO的信息后,我可能更困惑,但我想补充一点,我的php应用程序需要知道的是1)用户在其域中进行身份验证,2)他们的用户名。实现这一目标的最简单方法是什么?谢谢!

http://www.php.net/manual/en/book.ldap.php

我实际上刚刚实现了一个基本的LDAP身份验证脚本。这是我在更改和弄乱它以适应我的设置之前对脚本的初稿。这基本上连接到服务器,如果没有,scrpt 就会被杀死。然后尝试对给定的用户名和密码进行身份验证,否则将失败。快速简单。

$ldapHost = "example2.com";
$ldapPort = 666;
$ldapBaseDn = "ldap base dn here";
$username = "username";
$password = "password";
$ldapUserDn = "uid=$username,".$ldapBaseDn;
echo "LDAP query test'n";
echo "Connecting ...'n";
$ldapConn = ldap_connect($ldapHost, $ldapPort)
    or die("Unable to connect to LDAP server: $ldapHost'n");
echo "Authenticating user ...'n";
$isValid = ldap_bind($ldapConn, $ldapUserDn, $password)
    or die("Unable to authenticate user: $username'n");
echo "User $username is successfully authenticated!'n";
echo "Closing connection ...'n";
ldap_close($ldapConn);
exit();
?>