下面的代码根据 ldap 检查用户的凭据
<?php
$ldaphost = "ldap.domain.com";
$ldapport = 389;
$ds = ldap_connect($ldaphost, $ldapport)
or die("Could not connect to $ldaphost");
if ($ds)
{
$username = "[email protected] /cdn-cgi/l/email-protection";
$upasswd = "pass";
$ldapbind = ldap_bind($ds, $username, $upasswd);
if ($ldapbind)
{print "Congratulations! $username is authenticated.";}
else
{print "Access Denied!";}
}
?>
我的用户使用 Firefox 和 IE,我知道它们可以无缝地传递他们的 ActiveDirectory 凭据。
我只想检查 AD 组以查看是否在其中找到该用户名,如果是,则显示该页面,否则提示输入凭据。
由于我们的用户已经登录到域控制器,我想获取他们的用户名,检查是否在特定组中找到它,然后让他们进入,否则提示用户输入凭据。这怎么可能?
事实上,考虑到您使用 IIS 作为 Web 服务器,您实际上不需要从 PP 代码与 Active Directory 服务器进行通信来实现您想要的目的。
这里的关键词是集成 Windows 身份验证 http://en.wikipedia.org/wiki/Integrated_Windows_Authentication- 这就是 djn 的措辞找了 https://stackoverflow.com/questions/1527735/authenticate-against-ldap-using-php-active-directory-while-using-ie-firefox/1528426#1528426。如果打开此选项(并且拒绝匿名访问),IIS 将根据所请求资源的 Active Directory 和 NTFS 文件系统权限检查提供的凭据。因此,您可以使用简单的 NTFS 访问控制机制来控制对文件的访问。
如果您的用户使用 IE,他们甚至不必输入其凭据,因为这是通过所谓的自动完成的SPNEGO http://en.wikipedia.org/wiki/SPNEGO(Simple and Protected GSSAPI Negotiation Mechanism)及其底层机制Kerberos http://en.wikipedia.org/wiki/Kerberos_protocol or NTLMSSP http://en.wikipedia.org/wiki/NTLMSSP取决于您的客户端和服务器能够处理的内容。
据我所知,Firefox 也能够自动将 Windows 登录凭据移交给您的服务器。您只需调整一个配置选项 http://markmonica.com/2007/11/20/firefox-and-integrated-windows-authentication/打开该功能 - 不知道此信息对于 Firefox 3.5.x 是否仍然有效。
如果你在 *nix 系统上运行 Apache,你将不得不求助于一些服务器端模块来处理集成 Windows 身份验证类似系统。可能的选项是(不知道它们是否实际上仍然维护或稳定):
- mod_auth_ntlm_winbind http://samba.org/ftp/unpacked/lorikeet/mod_auth_ntlm_winbind/
- mod_auth_kerb http://modauthkerb.sourceforge.net/
- mod_ntlm http://modntlm.sourceforge.net/
对于 Windows 上的 Apache,有:
-
mod_ntlm http://mod-auth-sspi.sourceforge.net/docu/mod_ntlm/(已过时;与
mod_ntlm
above)
-
mod_auth_sspi http://mod-auth-sspi.sourceforge.net/docu/mod_auth_sspi/(的继承者
mod_ntlm
)
请注意,这些模块中的大多数似乎都很旧。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)