认证反对使用PHP,活动目录LDAP,同时使用IE /火狐(Authenticate against

2019-08-17 09:23发布

此代码如下检查用户对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组,以查看该用户名在那里找到若然,显示页面,否则提示凭证进入。

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

Answer 1:

你其实并不需要从你的PP代码的Active Directory服务器进行通信,以达到你想要给什么,你使用IIS作为Web服务器的事实。

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

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

据我知道Firefox是能够在Windows登录凭证交给你的服务器自动过。 您ONY必须调整配置选项来开启该功能-不知道这个信息仍然是与Firefox 3.5.x.有效

如果你在* nix系统上运行的Apache你将不得不诉诸一些服务器端模块来处理集成Windows身份验证样系统。 可能的选项是(不知道是不是他们实际上仍保持或稳定的):

  • mod_auth_ntlm_winbind
  • mod_auth_kerb
  • mod_ntlm

对于Apache在Windows上有:

  • mod_ntlm (过时;不一样mod_ntlm上文)
  • mod_auth_sspi (的后继mod_ntlm

请注意,大部分模块,似乎是很老了。



Answer 2:

工作只是现在类似的设置:我跳过所有的具有Web服务器进行身份验证与AD的客户端LDAP的东西让他(抱歉,我不记得这是什么所谓的M $选择宇宙)前。

如果客户端达到了PHP脚本他在AD,我有自己的用户名都在$_SERVER["AUTH_USER"]$_SERVER["LOGON_USER"]否则他不会继续执行脚本。



文章来源: Authenticate against ldap using PHP, active directory, while using IE/Firefox