6

下面的代码根据 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 组以查看是否在其中找到该用户名,如果是,则显示页面,否则提示输入凭据。

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

4

2 回答 2

8

考虑到您使用 IIS 作为 Web 服务器这一事实,您实际上不需要从您的 PP 代码与 Active Directory 服务器进行通信来实现您想要的。

这里的关键词是集成 Windows 身份验证- 这是 djn寻找的措辞。如果启用此选项(并且拒绝匿名访问),IIS 将根据 Active Directory 和所请求资源的 NTFS 文件系统权限检查提供的凭据。因此,您可以使用简单的 NTFS 访问控制机制来控制对文件的访问。

如果您的用户使用 IE,他们甚至不必输入他们的凭据,因为这是通过所谓的SPNEGO(简单和受保护的 GSSAPI 协商机制)及其底层机制KerberosNTLMSSP自动完成的,具体取决于您的客户端和服务器的能力加工。

据我所知,Firefox 也能够自动将 Windows 登录凭据移交给您的服务器。您只需要调整配置选项即可打开该功能 - 不知道此信息是否仍然适用于 Firefox 3.5.x。

如果您在 *nix 系统上运行 Apache,您将不得不求助于一些服务器端模块来处理类似集成 Windows 身份验证的系统。可能的选项是(不知道它们是否实际上仍然保持或稳定):

对于 Windows 上的 Apache,有:

请注意,这些模块中的大多数似乎都非常陈旧。

于 2009-10-07T09:22:29.030 回答
1

刚刚在类似的设置上工作:在让他进入之前,我跳过了所有让 Web 服务器使用 AD 对客户端进行身份验证的 LDAP 内容(对不起,我不记得在 M$ 备用宇宙中这叫什么)。

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

于 2009-10-06T22:27:24.573 回答