在使用IE / Firefox时使用PHP,活动目录对ldap进行身份验证

时间:2009-10-06 19:54:57

标签: php apache active-directory ldap intranet

下面的代码检查用户对ldap

的凭据
<?php
$ldaphost = "ldap.domain.com";
$ldapport = 389;

$ds = ldap_connect($ldaphost, $ldapport)
or die("Could not connect to $ldaphost");

if ($ds) 
{
    $username = "johndoe@domain.com";
    $upasswd = "pass";

    $ldapbind = ldap_bind($ds, $username, $upasswd);

    if ($ldapbind) 
        {print "Congratulations! $username is authenticated.";}
    else 
        {print "Access Denied!";}
}
?>

我的用户使用Firefox和IE,我知道可以无缝传递他们的ActiveDirectory凭据。

我只想查看AD组以查看是否在那里找到该用户名,如果是,则显示该页面,否则提示输入凭据。

由于我们的用户已经登录到域控制器,我想获取他们的用户名,检查是否在特定组中找到它,然后让他们进入,否则提示用户输入凭据。这怎么可能?

2 个答案:

答案 0 :(得分:8)

实际上,您不需要通过PP代码与Active Directory服务器通信,以实现您希望使用IIS作为Web服务器的事实。

这里的关键词是Integrated Windows Authentication - 这就是措辞djn looked for。如果启用此选项(并拒绝匿名访问),IIS将根据Active Directory检查提供的凭据以及所请求资源的NTFS文件系统特权。因此,您可以使用简单的NTFS访问控制机制来控制对文件的访问。

如果您的用户使用IE,他们甚至不必输入凭据,因为这是通过所谓的SPNEGO(简单和受保护的GSSAPI协商机制)及其基础机制Kerberos自动完成的。 NTLMSSP取决于您的客户端和服务器能够处理的内容。

据我所知,Firefox也可以自动将Windows登录凭据交给您的服务器。您必须调整configuration option才能启用该功能 - 不知道此信息在Firefox 3.5.x中是否仍然有效。

如果您在* nix系统上运行Apache,则必须使用某个服务器端模块来处理集成Windows身份验证类系统。可能的选择是(不知道它们实际上是否仍然保持或稳定):

对于Windows上的Apache,有:

请注意,大多数这些模块似乎都很老。

答案 1 :(得分:1)

刚刚在类似的设置上工作:我跳过所有那些让网络服务器用AD验证客户端的LDAP内容,然后让他进去(对不起,我不记得M $备用宇宙中的这个叫什么)。

如果客户端到达PHP脚本,他在AD中,我的用户名都在$_SERVER["AUTH_USER"]$_SERVER["LOGON_USER"],否则他永远不会访问脚本。

相关问题