代码之家  ›  专栏  ›  技术社区  ›  Brad

使用ie/firefox时,使用php、Active Directory对LDAP进行身份验证

  •  6
  • Brad  · 技术社区  · 15 年前

    下面的代码根据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!";}
    }
    ?>
    

    我的用户使用火狐和IE,我知道这可以无缝地传递他们的ActiveDirectory凭证。

    我只想检查广告组,看看是否在其中找到了用户名,如果是,显示页面,否则提示输入凭据。

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

    2 回复  |  直到 15 年前
        1
  •  7
  •   Community leo1    7 年前

    实际上,您不需要通过您的pp代码与Active Directory服务器通信来实现您想要的,因为您使用了IIS作为Web服务器。

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

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

    据我所知,火狐也可以自动将Windows登录凭据移交给您的服务器。你必须调整 configuration option 打开这个功能-不知道这个信息在火狐3.5.x中是否仍然有效。

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

    对于Windows上的Apache,有:

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

        2
  •  1
  •   djn    15 年前

    刚刚在一个类似的设置上工作:我跳过了所有的LDAP内容,让Web服务器在允许客户机使用ad进行身份验证之后才让他加入(对不起,我记不起在M$alternate Universe中这是什么)。

    如果客户机到达PHP脚本,他在广告中,我在广告中都有他的用户名。 $_SERVER["AUTH_USER"] 而在 $_SERVER["LOGON_USER"] 否则他就没法完成剧本。