下面的代码根据 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 组,看看是否在其中找到该用户名,如果是,则显示该页面,否则提示输入凭据。
由于我们的用户已经登录到域 Controller ,我想获取他们的用户名,检查是否在特定组中找到它,然后让他们登录,否则提示用户输入凭据。这怎么可能?
最佳答案
鉴于您使用 IIS 作为 Web 服务器,您实际上不需要从 PP 代码与 Active Directory 服务器通信来实现您想要的。
这里的关键词是Integrated Windows Authentication - 这就是 djn 的措辞 looked for .如果启用此选项(并且匿名访问被拒绝),IIS 将根据 Active Directory 和所请求资源的 NTFS 文件系统权限检查提供的凭据。因此,您可以使用简单的 NTFS 访问控制机制来控制对文件的访问。
如果您的用户使用 IE,他们甚至不必输入他们的凭据,因为这是通过所谓的 SPNEGO 自动完成的。 (简单且 protected GSSAPI 协商机制)及其底层机制 Kerberos或 NTLMSSP取决于您的客户端和服务器能够处理的内容。
据我所知,Firefox 也能够自动将 Windows 登录凭据移交给您的服务器。你只需要调整一个 configuration option打开该功能 - 不知道此信息是否对 Firefox 3.5.x 仍然有效。
如果您在 *nix 系统上运行 Apache,您将不得不求助于一些服务器端模块来处理类似集成 Windows 身份验证的系统。可能的选项是(不知道它们是否实际上仍在维护或稳定):
对于 Windows 上的 Apache,有:
-
mod_ntlm
(已过时;与上面的mod_ntlm
不同) -
mod_auth_sspi
(mod_ntlm
的继承者)
请注意,这些模块中的大多数似乎都很旧。
关于php - 在使用 IE/Firefox 时使用 PHP、事件目录对 ldap 进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1527735/