此代码如下检查用户对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组,以查看该用户名在那里找到若然,显示页面,否则提示凭证进入。
由于我们的用户已经登录到域控制器,我想抓住自己的用户名,检查,看它是否是特定组中发现的,然后在让他们,否则提示用户输入凭据。 这怎么可能?
你其实并不需要从你的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
)
请注意,大部分模块,似乎是很老了。
工作只是现在类似的设置:我跳过所有的具有Web服务器进行身份验证与AD的客户端LDAP的东西让他(抱歉,我不记得这是什么所谓的M $选择宇宙)前。
如果客户端达到了PHP脚本他在AD,我有自己的用户名都在$_SERVER["AUTH_USER"]
和$_SERVER["LOGON_USER"]
否则他不会继续执行脚本。
文章来源: Authenticate against ldap using PHP, active directory, while using IE/Firefox